用于登錄驗證過于復雜的網站,難以完全用代碼模擬登錄,則可以手動通過瀏覽器登錄后獲取cookies保存到文本,然后再通過讀取和更新cookies進行后續操作
#導入requests包
import requests
targetURL = '目標網站地址'
#設置頭UA
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
#開啟一個session會話
session = requests.session()
#設置請求頭信息
session.headers = headers
#申明一個用于存儲手動cookies的字典
manual_cookies={}
##打開手動設置的cookies文件
#部分網站需要滑動驗證,這里通過瀏覽器登錄成功后獲取cookies手動存到文本來繞過驗證,后續cookies自動更新
with open("manual_cookies.txt",'r',encoding='utf-8') as frcookie:
cookies_txt = frcookie.read().strip(';') #讀取文本內容
#手動分割添加cookie
for item in cookies_txt.split(';'):
name,value=item.strip().split('=',1) #用=號分割,分割1次
manual_cookies[name]=value #為字典cookies添加內容
#將字典轉為CookieJar:
cookiesJar = requests.utils.cookiejar_from_dict(manual_cookies, cookiejar=None,overwrite=True)
#將cookiesJar賦值給會話
session.cookies=cookiesJar
#向目標網站發起請求
res = session.get(targetURL)
#將CookieJar轉為字典:
res_cookies_dic = requests.utils.dict_from_cookiejar(res.cookies)
#將新的cookies信息更新到手動cookies字典
for k in res_cookies_dic.keys():
manual_cookies[k] = res_cookies_dic[k]
print(manual_cookies)
#重新將新的cookies信息寫回文本
res_manual_cookies_txt = ""
#將更新后的cookies寫入到文本
for k in manual_cookies.keys():
res_manual_cookies_txt += k+"="+manual_cookies[k]+";"
#將新的cookies寫入到文本中更新原來的cookies
with open('manual_cookies.txt',"w",encoding="utf-8") as fwcookie:
fwcookie.write(res_manual_cookies_txt);