Selenium - Cookie操作
Selenium - Cookie操作
转载:https://blog.csdn.net/ytraister/article/details/106033630
简介
在进行自动化测试的时候,用户登录都是通过页面输入账号密码,但是有些网站登录需要邮件、手机、验证码来验证登录;
虽然花点时间可以实现,但是我们还可以用更简单的方法 —— Cookie 。
常用操作
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com/') # 获取所有cookie信息 driver.get_cookies() # 获取指定name的cookie driver.get_cookie(name值) # 清除指定cookie driver.delete_cookie(name) # 清除所有cookie driver.delete_all_cookies() # 添加cookie值 driver.add_cookie(cookie_dict)
使用实战
-
登录账号后,可以通过F12 的请求中,获取到我们的cookie信息。
-
获取Cookies信息后,在后面多次运行自动化时,就可以添加cookies信息,就不用再进行账号密码登录;
获取Cookie
- 我们可以通过自动化获取到cookies信息,并保存为json格式。
- 步骤1:使用selenium访问百度页面;
- 步骤2:通过手工登录账号;
- 步骤3:将登录后的Cookies信息保存到本地;(在项目目录下已经有了一个名称为
cookies.json
的文件)
from selenium import webdriver import time import json driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.baidu.com') # 程序打开网页后30秒内 “手动登陆账户” time.sleep(30) # 将cookies信息保存为json格式 with open('cookies.json','w') as f: f.write(json.dumps(driver.get_cookies())) driver.close()
添加Cookie
方法一
from selenium import webdriver import time import json driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.baidu.com') # 首先清除由于浏览器打开已有的cookies driver.delete_all_cookies() with open('cookies.json','r') as f: # 使用json读取cookies 注意读取的是文件 所以用load而不是loads cookies_list = json.load(f) for cookie in cookies_list: driver.add_cookie(cookie) # 刷新页面,检查用户登录状态 driver.refresh() time.sleep(10) driver.close()
运行后,可能会发现出现报错,在插入
cookie
的时候 有返回如下错误:
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
这个
expiry
是cookie
的生命周期,也就是失效时间。我们有两种解决办法:
- 方法1—— 将
expiry
类型变为int
(其实不太清楚为什么变为int
就可以)- 方法2—— 删除该字段
方法二
from selenium import webdriver import json driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('https://www.baidu.com') # 首先清除由于浏览器打开已有的cookies driver.delete_all_cookies() with open('cookies.json', 'r') as f: cookies_list = json.load(f) # 方法1 将expiry类型变为int for cookie in cookies_list: # 并不是所有cookie都含有expiry 所以要用dict的get方法来获取 if isinstance(cookie.get('expiry'), float): cookie['expiry'] = int(cookie['expiry']) driver.add_cookie(cookie) # 方法2删除该字段:该字段有问题所以删除就可以 # for cookie in cookieslist: # if 'expiry' in cookie: # del cookie['expiry'] # driver.add_cookie(cookie) # 刷新页面,检查用户登录状态 driver.refresh() time.sleep(10) driver.close()
分类:
Selenium
标签:
Python-自动化测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)