You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Selenium返回的Cookie字典列表转换为CookieJar对象?

将Selenium获取的Cookie字典列表转换为CookieJar对象

我明白你的需求——Selenium的get_cookies()返回的是字典列表,而你想把它转换成和requests.session里一样的CookieJar对象,这样就能方便使用cookie.expires、cookie.name这类属性了。下面是具体的实现方法:

步骤1:导入必要的模块

我们需要用到requests库中的RequestsCookieJar和Cookie类(RequestsCookieJar是标准CookieJar的子类,和requests生态完美兼容):

from requests.cookies import RequestsCookieJar, Cookie
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

步骤2:修改你的代码,添加转换逻辑

在获取到current_cookies之后,我们遍历每个cookie字典,将其转换为Cookie对象并添加到RequestsCookieJar实例中:

options = webdriver.ChromeOptions()
options.add_argument('headless')
s = Service('/Users/almeco/Downloads/projects/research/refs/seo_tools_ref/sdf/chromedriver')
driver = webdriver.Chrome(service=s, options=options)
driver.get('https://my.adcombo.com/login')
time.sleep(2)
driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/div/loginform/form/input[1]').send_keys( 'email_address')
driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/div/loginform/form/input[2]').send_keys( 'pass')
driver.find_element(By.XPATH, '/html/body/div[2]/div/div/div[2]/div/loginform/form/button').click()
time.sleep(3)
current_cookies = driver.get_cookies()

# 开始转换为CookieJar
cookie_jar = RequestsCookieJar()

for cookie_dict in current_cookies:
    # 构造Cookie对象,映射Selenium返回的字典属性到Cookie类参数
    cookie = Cookie(
        version=0,
        name=cookie_dict['name'],
        value=cookie_dict['value'],
        port=None,
        port_specified=False,
        domain=cookie_dict['domain'],
        domain_specified=True,
        domain_initial_dot=cookie_dict['domain'].startswith('.'),  # 处理带前缀点的域名
        path=cookie_dict['path'],
        path_specified=True,
        secure=cookie_dict.get('secure', False),
        expires=cookie_dict.get('expiry', None),  # expiry可能不存在,默认None
        discard=False,
        comment=None,
        comment_url=None,
        rest={'HttpOnly': cookie_dict.get('httpOnly', False)},  # HttpOnly放在rest字典中
        rfc2109=False
    )
    cookie_jar.set_cookie(cookie)

步骤3:使用CookieJar对象

现在cookie_jar就是标准的CookieJar对象了,你可以像操作requests.session.cookies一样使用它:

# 遍历所有cookie并访问属性
for cookie in cookie_jar:
    print(f"Cookie名称: {cookie.name}")
    print(f"过期时间戳: {cookie.expires}")
    print(f"是否为HttpOnly: {cookie.get('HttpOnly')}")
    print(f"是否启用secure: {cookie.secure}")
    print("---")

# 直接通过键名获取指定cookie
if '_ym_uid' in cookie_jar:
    print(f"_ym_uid的值: {cookie_jar['_ym_uid'].value}")

关键细节说明

  • Selenium返回的cookie字典中,httpOnly是驼峰式命名,而Cookie类需要将这类非标准属性放在rest参数中传递。
  • domain_initial_dot参数用来标识域名是否以.开头(比如.domain.com),这有助于CookieJar后续正确匹配请求域名。
  • 如果某个cookie没有expiry字段(会话型cookie),我们用get('expiry', None)设置默认值,避免抛出KeyError。

内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:22:44