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()

admin_url = 'http://****/newecshop/admin/index.php'
cookie = dict(name='ECSCP_ID',value='7406d5a6f0c5bdfbebcc29b4e41cea9731d9e9f0')

driver.get(admin_url)
driver.add_cookie(cookie)
driver.get(admin_url)

sleep(3)
driver.quit()

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

使用Requests配合Selenium绕过登录#

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

安装requests: pip install requests
示例代码:

import requests
from selenium import webdriver
from time import sleep

def get_cookie(username, password):
    login_url = 'http://****/newecshop/admin/privilege.php'
    data = dict(username=username,password=password, act='signin')
    res = requests.post(login_url, data=data, allow_redirects=False)
    esscp_id = res.cookies.get('ECSCP_ID')
    cookie = dict(name='ECSCP_ID',value=esscp_id)
    return cookie

admin_url = 'http://****/newecshop/admin/index.php'

driver = webdriver.Chrome()
driver.get(admin_url)  
cookie = get_cookie(****, ****)
driver.add_cookie(cookie)
driver.get('http://***/newecshop/admin/order.php?act=list')

sleep(3)
driver.quit()

就可以直接跳过登录,如下图。

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

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值