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

将Selenium导出Cookie加载到Python Requests会话时的错误及生效问题

我来帮你搞定这个Cookie加载的问题!

问题根源

你碰到的'list' object has no attribute 'extract_cookies'错误,核心原因是Requests会话的cookies属性要求的是RequestsCookieJar对象,而不是Selenium导出的字典列表。直接把列表赋值给它,会覆盖原本的CookieJar实例,导致Requests后续处理请求时找不到必要的方法,自然报错。

正确的Cookie加载方式

你需要把Selenium导出的每个Cookie字典,逐个添加到Session的CookieJar中,而不是直接赋值。下面是修改后的代码:

import requests
import pickle

def load_cookies(filename, session):
    with open(filename, 'rb') as f:
        cookies_list = pickle.load(f)
        # 遍历Cookie列表,逐个添加到会话的CookieJar里
        for cookie in cookies_list:
            # 处理expiry字段:Selenium导出的是浮点数,转成整数避免类型问题
            if 'expiry' in cookie:
                cookie['expiry'] = int(cookie['expiry'])
            # 用Session的cookies.set方法添加Cookie,参数对应Selenium导出的字段
            session.cookies.set(
                name=cookie['name'],
                value=cookie['value'],
                domain=cookie['domain'],
                path=cookie['path'],
                secure=cookie['secure'],
                httponly=cookie['httpOnly']
            )

# 使用示例
initial_state = requests.Session()
load_cookies(time_cookie_file, initial_state)
# 现在发起请求就会携带正确的Cookie了
search_requests = initial_state.get(search_url)
关于“加载后Cookie不生效”的补充

如果你之前尝试了其他方法“成功加载”但Cookie没生效,大概率是因为没有正确将Cookie注入到RequestsCookieJar中。只有当Cookie被正确添加到这个Jar里,Requests在发起请求时才会自动携带它们,和Selenium的Cookie生效逻辑是一致的。

几个要注意的细节
  • 域名匹配:Selenium导出的Cookie可能带有.前缀(比如.website.com),这表示该Cookie适用于所有子域名,Requests会正确识别这个范围,不用手动修改。
  • 参数名对应:Selenium里的httpOnly字段,在Requests的set方法里要写成httponly(注意是小写的ly结尾)。
  • 验证加载结果:可以在加载后打印print(initial_state.cookies),查看所有已加载的Cookie,确认是否和Selenium导出的一致。

这样修改后,你的Requests会话应该就能正确复用Selenium导出的Cookie,保持会话状态啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:01:55