Selenium中使用Cookies繞過登錄


在使用selenium測試后台時常常每個流程都需要走登錄流程,這樣自然比較浪費時間。如果遇到登錄需要輸入驗證碼等情況,就可能出師未捷身先死。

在Web應用中,登錄狀態通常是通過Cookie中對應的session id驗證的。也是就是說,我們只要攜帶上登錄后的Cookies,瀏覽器就會自動識別我們為登錄狀態。由於Selenium每次啟動的瀏覽器是一個隔離的環境,不能直接使用本地已經保存的Cookies值,我們需要通過driver的add_cookie()方法手動添加Cookies,來繞過登錄。

手工抓取Cookie並繞過登錄

如圖,先手工登錄后,通過開發者工具-網絡面板,查看任意請求中的Cookie值,經嘗試分析,ECSCP_ID的值為session id,我們只需要添加此條Cookie即可。

Cookie的存儲格式,如下圖所示,每一條包含name,value,path,secure等字段

WebDriver相關的Cookies操作

  • get_cookies(self): 獲取當前會話中當前域名所有cookies
  • get_cookie(self, name): 獲取當前會話中當前域名指定name對應的cookie值
  • delete_cookie(self, name): 刪除指定cookie
  • delete_all_cookies(self): 刪除所有cookie
  • add_cookie(self, cookie_dict): 添加cookie

添加Cookie時需要逐條添加,cookie_dict示例:

  • driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
  • driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
  • driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})"

示例代碼:


from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

driver.get('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php?act=login')
driver.add_cookie(dict(name='ECSCP_ID',value='7406d5a6f0c5bdfbebcc29b4e41cea9731d9e9f0'))
driver.get('http://39.104.14.232/ecshop/wwwroot/admin/index.php')


sleep(3)
driver.quit()

注意:必須先打開一個頁面(同域名頁面)才能設置cookie,否則會報UnableToSetCookieException

使用Requests配合Selenium繞過登錄

手工抓取的Cookie有一定的有效期,我們可以通過發送登錄接口,從響應中拿到Cookies再放入Selenium中使用。

示例代碼:

import requests
from selenium import webdriver
from time import sleep


data = dict(username='****', password='****', act='signin')
res = requests.post('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php', data=data, allow_redirects=False)

esscp_id = res.cookies.get('ECSCP_ID')

driver = webdriver.Chrome()
driver.get('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php?act=login')

driver.add_cookie(dict(name='ECSCP_ID',value=esscp_id))
driver.get('http://39.104.14.232/ecshop/wwwroot/admin/index.php')


sleep(3)
driver.quit()

同樣,如果有多條Cookies,需要從請求響應中逐個提取,在Selenium中逐個添加。

用戶名、密碼可微信聯系lockingfree獲取


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM