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

如何同时使用Requests与Selenium并正确处理Cookie同步?

requests与Selenium Cookie双向同步实现流程

一、初始化requests会话并获取初始Cookie

先通过requests会话请求目标网站,建立初始会话并获取Cookie:

import requests

# 初始化requests会话
session = requests.Session()
# 请求网站首页或登录接口,获取初始Cookie
response = session.get("http://本地网站域名")
# session.cookies 已存储当前会话的Cookie集合

二、将requests Cookie导入Selenium WebDriver

Selenium需要先访问目标网站才能设置Cookie,同时要把requests的Cookie转换成Selenium兼容的格式:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

# 初始化Chrome浏览器(可根据需求改用其他浏览器)
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式,可选
driver = webdriver.Chrome(options=chrome_options)

# 先访问目标网站的任意页面(必须操作,否则无法设置Cookie)
driver.get("http://本地网站域名")

# 清除浏览器默认Cookie
driver.delete_all_cookies()

# 遍历requests会话的Cookie,转换格式后添加到浏览器
for cookie in session.cookies:
    driver.add_cookie({
        "name": cookie.name,
        "value": cookie.value,
        "domain": cookie.domain,
        "path": cookie.path,
        "expires": cookie.expires,
        "secure": cookie.secure,
        "httpOnly": cookie.has_nonstandard_attr("HttpOnly")
    })

# 刷新页面,确保Cookie生效
driver.refresh()

三、在Selenium中执行专属操作

完成API无法实现的交互操作,比如点击按钮、提交动态表单等:

# 示例:点击指定按钮(根据实际页面元素调整定位方式)
# driver.find_element(By.CSS_SELECTOR, ".target-btn").click()
# 示例:填写并提交表单
# driver.find_element(By.ID, "username").send_keys("your-username")
# driver.find_element(By.ID, "submit-btn").click()

四、将Selenium Cookie导回requests会话

操作完成后,把浏览器的最新Cookie同步回requests会话,继续用API请求:

# 获取Selenium当前的所有Cookie
selenium_cookies = driver.get_cookies()

# 清空requests会话原有Cookie
session.cookies.clear()

# 转换Cookie格式并添加到requests会话
for cookie in selenium_cookies:
    session.cookies.set(
        name=cookie["name"],
        value=cookie["value"],
        domain=cookie["domain"],
        path=cookie["path"],
        expires=cookie.get("expires"),
        secure=cookie.get("secure"),
        rest={"HttpOnly": cookie.get("httpOnly")}
    )

# 关闭浏览器
driver.quit()

# 此时session已携带最新Cookie,可继续调用API
# response = session.post("http://本地网站域名/api/xxx", data={"key": "value"})

关键注意事项

  • 必须先让Selenium访问目标网站页面,否则无法设置Cookie(浏览器安全策略限制)。
  • 确保Cookie的domain和path与目标网站匹配,否则Cookie不会生效。
  • 处理HttpOnly、Secure类型的Cookie时,要正确设置对应属性,避免会话验证失败。
  • 部分网站会生成动态CSRF Token,同步Cookie后建议重新获取页面中的Token,再用于API请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:04:54