Selenium中使用Cookies绕过登录

忘是亡心i 2023-10-09 10:14 117阅读 0赞

在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间。如果遇到登录需要输入验证码等情况,就可能出师未捷身先死。

在Web应用中,登录状态通常是通过Cookie中对应的session id验证的。也是就是说,我们只要携带上登录后的Cookies,浏览器就会自动识别我们为登录状态。由于Selenium每次启动的浏览器是一个隔离的环境,不能直接使用本地已经保存的Cookies值,我们需要通过driver的add_cookie()方法手动添加Cookies,来绕过登录。

如图,先手工登录后,通过开发者工具-网络面板,查看任意请求中的Cookie值,经尝试分析,ECSCP_ID的值为session id,我们只需要添加此条Cookie即可。
1064540-20190907164401828-222684102.png

Cookie的存储格式,如下图所示,每一条包含name,value,path,secure等字段
1064540-20190907164728351-805953910.png

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})”

示例代码:

  1. from selenium import webdriver
  2. from time import sleep
  3. driver = webdriver.Chrome()
  4. driver.get('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php?act=login')
  5. driver.add_cookie(dict(name='ECSCP_ID',value='7406d5a6f0c5bdfbebcc29b4e41cea9731d9e9f0'))
  6. driver.get('http://39.104.14.232/ecshop/wwwroot/admin/index.php')
  7. sleep(3)
  8. driver.quit()

注意:必须先打开一个页面(同域名页面)才能设置cookie,否则会报UnableToSetCookieException

使用Requests配合Selenium绕过登录

手工抓取的Cookie有一定的有效期,我们可以通过发送登录接口,从响应中拿到Cookies再放入Selenium中使用。

示例代码:

  1. import requests
  2. from selenium import webdriver
  3. from time import sleep
  4. data = dict(username='****', password='****', act='signin')
  5. res = requests.post('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php', data=data, allow_redirects=False)
  6. esscp_id = res.cookies.get('ECSCP_ID')
  7. driver = webdriver.Chrome()
  8. driver.get('http://39.104.14.232/ecshop/wwwroot/admin/privilege.php?act=login')
  9. driver.add_cookie(dict(name='ECSCP_ID',value=esscp_id))
  10. driver.get('http://39.104.14.232/ecshop/wwwroot/admin/index.php')
  11. sleep(3)
  12. driver.quit()

同样,如果有多条Cookies,需要从请求响应中逐个提取,在Selenium中逐个添加。

用户名、密码可微信联系lockingfree获取

转载于:https://www.cnblogs.com/superhin/p/11481803.html

发表评论

表情:
评论列表 (有 0 条评论,117人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Selenium使用Cookies登录

    在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间。如果遇到登录需要输入验证码等情况,就可能出师未捷身先死。 在Web应用中,登录状态通常是通

    相关 Python爬虫登录的小技巧

    前言 很多时候我们做 Python 爬虫时或者自动化测试时需要用到 selenium 库,我们经常会卡在登录的时候,登录验证码是最头疼的事情,特别是如今的文字验证码和图形验证