web自動化 繞過登入

2022-09-22 08:27:17 字數 2495 閱讀 7044

兩個方法:

2、新增cookies的方式:思路是:先對比登入前和登入後的cookies區別,檢視登入後cookies裡那些值是多出來的,然後通過新增cookies的方式,將值新增進去;這樣就可以達到跳過登入的效果。(缺點:邏輯性比較複雜,**量多。優點:可以保證每次cookies都是有效的)

具體操作步驟:

1、通過抓包工具,分享登入前與登入後的cookies資訊

2、通過不同的方式,需要新增到cookies裡的值(重點:怎麼去動態獲取這些值)

class dictjson:

@staticmethod

def case_ins_dict_json(username, password):

# caseinsensitivedict 也是一種字典抽象類。轉字典

# 獲取時間

h_data = userlogin().pc_user_login(username=username, password=password)[0]

headers_data = dict(h_data)

set_cookie = headers_data['set-cookie']

c = set_cookie.split(';')[2]

expires = c.split('=')[1]

ans_time = int(time.mktime(time.strptime(expires, '%a, %d-%b-%y %h:%m:%s %z')))

# 獲取user_ticket

c_data = userlogin().pc_user_login(username=username, password=password)[1]

a = dict(c_data)['cookies']

user_ticket = a.split('\"')[11]

return ans_time, user_ticket

caseinsensitivedict:

從python3的官方文件中可以找到它,具體在 8.4. collections.abc — abstract base classes for containers中可以找到它的定義

我們可以簡單的認為,這是一個字典抽象類,你只要自己實現了其中的getitem, setitem, delitem, iter, len方法即可實現一個自己的字典,而caseinsensitivedict正是基於此構造了自己的資料結構。

split():   pythonsplit()通過指定分隔符對字串進行切片,如果引數 num 有指定值,則分隔 num+1 個子字串 ---------

time.strptime() : python timestrptime()函式根據指定的格式把一個時間字串解析為時間元組。------------------

3、將獲取到的值,新增到cookies裡

class getlogin:

def __init__(self, driver):

self.dr = driver

# 讀取url

def cookie_login(self, url, username, password):

"""帶cookie登入繞過驗證碼"""

# 獲取user_ticket

user_ticket = dictjson().case_ins_dict_json(username=username, password=password)[1]

# 獲取時間戳

expiry_time = dictjson().case_ins_dict_json(username=username, password=password)[0]

time.sleep(2)

# 開啟瀏覽器

getbrowser(driver=self.dr).open_browser(url=url)

# 新增cookie

c_ticket =

c_name =

c_user_type =

getbrowser(driver=self.dr).add_cookies(cookie=c_ticket)

getbrowser(driver=self.dr).add_cookies(cookie=c_name)

getbrowser(driver=self.dr).add_cookies(cookie=c_user_type)

# 等待3s

time.sleep(3)

# 重新整理頁面

getbrowser(driver=self.dr).refresh_browser()

4、重新整理頁面,即可實現登入