pin_drop当前位置:知识文库 ❯ 图文
Selenium Cookie操作 - 获取添加删除Cookie完整指南
Cookie是浏览器存储在客户端的小段数据,用于维持会话状态、记录用户偏好等。Selenium提供了完整的Cookie操作接口,包括添加、获取、删除Cookie等。在自动化测试中,Cookie操作常用于跳过登录、保持会话状态、验证Cookie设置等场景,是提升测试效率的重要技能。
一、Cookie概述
Cookie是服务器发送到用户浏览器并保存在本地的一小块数据。当浏览器再次访问同一网站时,会携带这些Cookie数据。Cookie在Web自动化测试中有以下重要作用:
-
会话管理:维持用户登录状态,避免每次请求都重新登录
-
用户偏好:记录用户的语言设置、主题偏好等个性化配置
-
追踪分析:用于网站流量统计和用户行为分析
二、Cookie操作语法
代码示例
# 获取Cookie
cookies = driver.get_cookies() # 获取所有Cookie
cookie = driver.get_cookie(name) # 获取指定名称的Cookie
# 添加Cookie
driver.add_cookie(cookie_dict) # 添加Cookie(字典格式)
# 删除Cookie
driver.delete_cookie(name) # 删除指定名称的Cookie
driver.delete_all_cookies() # 删除所有Cookie三、Cookie字典参数详解
使用 add_cookie() 时,需要传入一个字典。以下是所有可用的键值:
四、代码示例
示例1:获取和查看Cookie
代码示例
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 获取所有Cookie
cookies = driver.get_cookies()
print(f"Cookie数量: {len(cookies)}")
# 打印所有Cookie
for cookie in cookies:
print(f" {cookie['name']}: {cookie['value'][:30]}")
# 获取指定Cookie
specific = driver.get_cookie('_ga')
if specific:
print(f"\n_ga Cookie: {specific}")
else:
print("\n未找到_ga Cookie")
driver.quit()输出:
代码示例
Cookie数量: 2
_ga: GA1.2.1234567890.1234567890
_gid: GA1.2.0987654321.1234567890
未找到_ga Cookie示例2:添加和删除Cookie
代码示例
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.example.com")
# 添加Cookie
driver.add_cookie({
'name': 'test_cookie',
'value': 'hello_selenium',
'path': '/'
})
driver.add_cookie({
'name': 'session_id',
'value': 'abc123def456',
'path': '/',
'secure': True
})
# 验证添加的Cookie
test = driver.get_cookie('test_cookie')
print(f"添加的Cookie: {test['name']} = {test['value']}")
# 删除指定Cookie
driver.delete_cookie('test_cookie')
deleted = driver.get_cookie('test_cookie')
print(f"删除后: {deleted}")
# 删除所有Cookie
driver.delete_all_cookies()
all_cookies = driver.get_cookies()
print(f"清空后Cookie数量: {len(all_cookies)}")
driver.quit()输出:
代码示例
添加的Cookie: test_cookie = hello_selenium
删除后: None
清空后Cookie数量: 0示例3:通过Cookie跳过登录
这是Cookie操作在实际自动化测试中最常用的场景。通过注入登录态的Cookie,可以跳过繁琐的登录流程,直接进入需要测试的功能页面。
代码示例
from selenium import webdriver
driver = webdriver.Chrome()
# 先访问网站(必须先访问才能添加Cookie)
driver.get("https://www.example.com")
# 添加登录态Cookie(模拟已登录状态)
driver.add_cookie({
'name': 'session_token',
'value': 'user_logged_in_token_12345',
'domain': '.example.com',
'path': '/',
})
driver.add_cookie({
'name': 'user_id',
'value': '10086',
'domain': '.example.com',
'path': '/',
})
# 刷新页面使Cookie生效
driver.refresh()
# 验证Cookie
session = driver.get_cookie('session_token')
user = driver.get_cookie('user_id')
print(f"会话Token: {session['value'] if session else '未找到'}")
print(f"用户ID: {user['value'] if user else '未找到'}")
driver.quit()输出:
代码示例
会话Token: user_logged_in_token_12345
用户ID: 10086五、实际应用场景
-
场景1:自动化测试中通过注入登录Cookie跳过登录流程,提高测试执行效率
-
场景2:保存和恢复会话状态,将Cookie保存到JSON文件,下次启动时加载恢复
-
场景3:验证网站Cookie策略,检查安全相关Cookie(如secure、httpOnly)是否正确设置
六、注意事项
注意:添加Cookie前必须先访问目标域名,否则会抛出
InvalidCookieDomainException。
注意:httpOnly的Cookie无法通过JavaScript访问(document.cookie),但Selenium可以获取。
注意:Cookie的domain必须与当前页面域名匹配,否则添加会失败。
注意:
delete_all_cookies()只删除当前域名的Cookie,不影响其他域名。
七、Cookie操作对比
八、小结
-
完整CRUD:Selenium提供完整的Cookie创建、读取、更新、删除操作接口
-
前置条件:添加Cookie前必须先访问目标域名,否则会报域名异常
-
核心场景:Cookie常用于跳过登录、保持会话等场景,大幅提升测试效率
-
域名匹配:Cookie的domain和path属性需与目标页面匹配才能生效
小贴士
-
Cookie保存与加载:可以将Cookie保存为JSON文件,下次启动时读取并注入,实现会话持久化
-
刷新生效:添加Cookie后需要调用
driver.refresh()刷新页面使Cookie生效 -
Cookie格式:
get_cookies()返回的每个Cookie包含name、value、domain、path、secure、httpOnly、expiry等字段
九、常见问题
常见问题
Q1:为什么添加Cookie时报InvalidCookieDomainException?
添加Cookie前必须先访问目标域名。Selenium不允许在未访问任何页面的情况下添加Cookie。正确做法:先调用 driver.get("https://example.com"),然后再添加Cookie。
Q2:如何保存和恢复Cookie?
使用pickle或json模块将 get_cookies() 返回的列表保存到文件,下次启动时读取文件并遍历调用 add_cookie() 即可恢复。
Q3:Cookie的domain参数怎么写?
domain通常需要以点开头表示子域名匹配,如 '.example.com'。如果不指定domain,默认为当前页面的域名。
Q4:添加Cookie后为什么不生效?
添加Cookie后需要刷新页面才能生效,调用 driver.refresh()。另外,如果登录Cookie已过期或token无效,即使添加成功也无法通过验证。
Q5:可以修改已存在的Cookie吗?
Selenium没有直接的update方法。需要先 delete_cookie(name) 删除旧的,再 add_cookie() 添加新的。
十、练习题
练习1
编写程序,访问一个网站,获取所有Cookie并打印其名称、值和域名,然后删除所有Cookie并验证清空结果。
练习2
编写程序,实现Cookie的保存和加载功能:将当前会话Cookie保存到JSON文件,下次启动时从文件加载Cookie恢复会话状态。
本文涉及AI创作
内容由AI创作,请仔细甄别