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() 时,需要传入一个字典。以下是所有可用的键值:

参数 类型 必填 说明
name str Cookie名称
value str Cookie值
path str Cookie路径,默认'/'
domain str Cookie域名
secure bool 是否仅HTTPS传输
expiry int 过期时间戳(秒)
httpOnly bool 是否仅HTTP访问

四、代码示例

示例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操作对比

操作 方法 返回值
获取所有 get_cookies() Cookie字典列表
获取单个 get_cookie(name) 单个Cookie字典或None
添加 add_cookie(dict) 无返回值
删除单个 delete_cookie(name) 无返回值
删除所有 delete_all_cookies() 无返回值

八、小结

  • 完整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恢复会话状态。

标签: Selenium Cookie操作 会话管理 跳过登录 自动化测试 Python

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Selenium弹窗处理 - Alert、Confirm、Prompt弹窗操作教程 下一篇: Selenium截图教程 - save_screenshot页面元素截图方法

poll相关推荐