如何同时使用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
相关产品推荐
相关产品推荐

