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

如何将requests.session会话转移至selenium.webdriver复用

需求可行性结论

两种诉求均可以实现,无技术阻断。

方案1:迁移requests.Session会话到Selenium浏览器

requests维护的会话核心是服务端下发的Cookie,少量业务会额外在localStorage/sessionStorage写入鉴权标记,只要把这些状态全量同步到Selenium启动的浏览器上下文,即可完全复用之前的会话状态。
操作步骤:

  • 跑完所有requests.Session的POST提交逻辑,从session对象中提取全量Cookie及对应属性(domain、path、secure、httponly等)
  • 启动Selenium驱动,先访问目标站点的根域名(未访问对应域名时,浏览器会拒绝写入跨域Cookie)
  • 遍历从requests中提取的Cookie,调用Selenium的add_cookie方法逐个写入浏览器
  • 若业务存在本地存储的鉴权字段,通过Selenium执行JS脚本写入对应存储即可
    示例代码:
import requests
from selenium import webdriver

# 原有requests提交逻辑
req_session = requests.Session()
req_session.post("https://your-target-domain.com/api/submit", data={"param": "test"})

# 启动Selenium
driver = webdriver.Chrome()
# 必须先访问目标域名,否则Cookie写入会报错
driver.get("https://your-target-domain.com")

# 同步requests的Cookie到Selenium
for cookie in req_session.cookies:
    cookie_dict = {
        "name": cookie.name,
        "value": cookie.value,
        "domain": cookie.domain,
        "path": cookie.path,
        "secure": cookie.secure,
        "httpOnly": cookie.has_nonstandard_attr("HttpOnly")
    }
    driver.add_cookie(cookie_dict)

# 如需同步localStorage/sessionStorage,执行对应JS即可
# driver.execute_script("window.localStorage.setItem('auth_flag', 'xxxx');")

# 刷新页面即可生效,直接复用会话操作
driver.refresh()
方案2:先启动Selenium,在浏览器环境内发POST请求后继续操作

该方案兼容性更好,请求从浏览器真实环境发出,不会出现Cookie属性不匹配、环境指纹校验不通过的问题,优先推荐。
常见两种实现路径:

  • 路径1:通过Selenium注入JS脚本,调用浏览器原生fetch/XMLHttpRequest发送POST请求,请求自动携带当前浏览器的全量会话凭证,发送完成后可直接操作页面
  • 路径2:从Selenium中提取当前浏览器的全量Cookie,传入requests发送POST请求,请求完成后如果有Cookie更新,再同步回Selenium即可
    JS注入发POST请求示例代码:
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://your-target-domain.com")

# 注入JS在浏览器上下文发POST请求
post_js = """
return fetch("https://your-target-domain.com/api/submit", {
    method: "POST",
    credentials: "include", // 自动携带跨域Cookie
    headers: {
        "Content-Type": "application/x-www-form-urlencoded" // 根据接口实际类型调整
    },
    body: "param=test&other_param=123" // JSON格式参数用JSON.stringify转换即可
}).then(resp => resp.text())
"""
# 执行脚本获取接口返回
api_resp = driver.execute_script(post_js)

# 请求发送完成,会话状态自动保留,可直接操作浏览器
driver.find_element("id", "target-button").click()
注意事项
  • 同步Cookie时如果遇到写入失败,优先检查是否已经提前访问了目标域名
  • 若站点存在严格的反爬校验,优先选择方案2的JS注入发请求逻辑,避免被识别为爬虫
  • 带SameSite、Secure属性的Cookie,写入时要把对应属性补全到add_cookie的参数字典中,否则会被浏览器拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:36:08