如何将Requests的Cookies转换为Selenium/反检测浏览器兼容格式?
别用session.cookies.get_dict(),这玩意儿会丢掉domain、expiry、httpOnly这些Selenium必须的属性。直接遍历Requests的CookieJar对象,把每个cookie转换成Selenium需要的字典结构就行,一步到位。
完整代码示例
import requests from selenium import webdriver # 1. 先用 Requests 获取会话 Cookies url = "https://example.com" s = requests.Session() s.get(url) # 2. 转换 Cookies 格式 selenium_cookies = [] for cookie in s.cookies: cookie_dict = { "domain": cookie.domain, "name": cookie.name, "value": cookie.value, "path": cookie.path, "expiry": cookie.expires, "httpOnly": cookie.has_nonstandard_attr('HttpOnly'), "secure": cookie.secure, # 按需设置 sameSite,常见值:"Lax"、"None"、"Strict" "sameSite": "Lax" } # 移除无过期时间的字段,避免Selenium报错 if cookie_dict["expiry"] is None: del cookie_dict["expiry"] selenium_cookies.append(cookie_dict) # 3. 加载到 Selenium 浏览器 driver = webdriver.Chrome() driver.get(url) # 必须先访问目标域名,否则无法添加跨域Cookies for cookie in selenium_cookies: driver.add_cookie(cookie) # 刷新页面验证 driver.refresh()
关键点说明
- 一定要先让Selenium访问目标域名,浏览器会拒绝添加不属于当前站点的Cookies。
cookie.has_nonstandard_attr('HttpOnly')是判断HttpOnly类型Cookie的准确方式,Requests的Cookie对象没有直接暴露该属性。- 部分会话型Cookie没有expiry字段,删掉该字段即可,Selenium会自动识别为会话Cookie。
- sameSite属性根据目标网站的实际要求调整,不确定的话默认填"Lax"即可。
内容的提问来源于stack exchange,提问作者rdy4sv
相关产品推荐
相关产品推荐

