Selenium中使用Cookies绕过登录
在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间。如果遇到登录需要输入验证码等情况,就可能出师未捷身先死。
在Web应用中,登录状态通常是通过Cookie中对应的session id验证的。也是就是说,我们只要携带上登录后的Cookies,浏览器就会自动识别我们为登录状态。由于Selenium每次启动的浏览器是一个隔离的环境,不能直接使用本地已经保存的Cookies值,我们需要通过driver的add_cookie()
方法手动添加Cookies,来绕过登录。
手工抓取Cookie并绕过登录
如图,先手工登录后,通过开发者工具-网络面板,查看任意请求中的Cookie值,经尝试分析,JSESSIONID是关键所在,我们只需要添加此条Cookie即可。
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
import time
driver=webdriver.Chrome()
driver.get('http://xxxxxxx/xxxxxxx/login')#打开页面
driver.add_cookie({'name':'JSESSIONID','value':'c8963781-c9dc-4bc7-8c84-297aeb40115f'})#添加cookie
time.sleep(4)
driver.refresh()#刷新页面
time.sleep(4)
driver.quit()
添加cookie后直接跳过登录,针对有验证码的很有作用哦