You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将requests的session.cookies导出为JSON格式用于Selenium?

如何将Requests的Cookies导出为适配Selenium的JSON格式?

没问题,我来帮你搞定这个问题!其实核心是requests的RequestsCookieJar对象和Selenium所需的cookie格式不匹配——直接序列化Jar对象到JSON会包含很多Selenium不需要的内部属性,导致导入失败。下面是具体的解决步骤:

1. 将Requests CookieJar转换为Selenium兼容的字典列表

Selenium要求每个cookie是一个包含namevaluedomainpath等标准字段的字典。我们可以通过遍历RequestsCookieJar,提取每个cookie的关键属性来生成这个列表:

import requests
import json

# 假设你已经有了获取到cookies的requests会话对象(比如你的scraper)
scraper = requests.Session()
scraper.get("https://目标网站域名.com")  # 先访问网站获取cookies

# 转换为Selenium适配的格式
selenium_ready_cookies = [
    {
        "name": cookie.name,
        "value": cookie.value,
        "domain": cookie.domain,
        "path": cookie.path,
        "expires": cookie.expires,
        "secure": cookie.secure,
        "httpOnly": cookie.has_nonstandard_attr('HttpOnly')
    }
    for cookie in scraper.cookies
]

# 导出为JSON文件
with open("selenium_cookies.json", "w", encoding="utf-8") as f:
    json.dump(selenium_ready_cookies, f, indent=4, ensure_ascii=False)

2. 关键细节说明

  • httpOnly字段的处理:requests的Cookie对象没有直接暴露httpOnly属性,所以我们用has_nonstandard_attr('HttpOnly')来判断这个标记是否存在。
  • expires字段:如果cookie没有过期时间,这个值会是None,JSON序列化后会变成null,Selenium可以正常处理这种情况。
  • 必须匹配域名:后续导入Selenium时,必须先访问目标网站的域名,否则Selenium不允许添加跨域cookies。

3. (可选)将JSON cookies导入Selenium

如果你需要把导出的JSON直接导入Selenium,这里也附上代码:

from selenium import webdriver
import json

driver = webdriver.Chrome()
# 先访问目标网站的基础页面,确保域名匹配
driver.get("https://目标网站域名.com")

# 读取JSON文件
with open("selenium_cookies.json", "r", encoding="utf-8") as f:
    cookies = json.load(f)

# 逐个添加cookies
for cookie in cookies:
    driver.add_cookie(cookie)

# 刷新页面验证cookies生效
driver.refresh()

这样操作后,你的cookies就能完美在requests和Selenium之间转移啦!

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

火山引擎 最新活动