如何使用Python requests获取全部cookie值?为何requests仅能拿到部分cookie?
你遇到的requests只能获取部分cookie、selenium可以获取全量的问题,本质是两者的运行机制差异导致的,核心原因和对应解决方案如下:
核心原因
- requests是HTTP请求库,仅能捕获单次/会话内HTTP响应头
Set-Cookie字段返回的服务端侧生成的cookie,无法执行页面内嵌的JS代码,也无法获取JS运行时动态写入document.cookie的前端侧生成cookie。而selenium调用真实浏览器内核,会完整执行页面所有前端逻辑、跟进所有重定向跳转,会按照浏览器的cookie规则存储所有来源的cookie,因此可以拿到全量内容。 - 部分站点会对请求上下文做校验,若requests请求的头信息、TLS指纹和正常浏览器差异较大,服务端会判定为异常请求,仅返回部分必要cookie,不会下发全量cookie内容。
解决方案
- 方案1:selenium + requests组合使用,先用selenium启动浏览器拿到全量cookie,再赋值给requests会话复用,代码示例如下:
import requests from selenium import webdriver # 启动selenium获取全量cookie driver = webdriver.Chrome() driver.get("替换为你要访问的目标站点URL") selenium_all_cookies = driver.get_cookies() driver.quit() # 把cookie写入requests会话 sess = requests.Session() for cookie in selenium_all_cookies: sess.cookies.set( name=cookie["name"], value=cookie["value"], domain=cookie["domain"], path=cookie["path"], secure=cookie["secure"] ) # 后续使用sess发送请求即可携带全量cookie resp = sess.get("替换为你要请求的接口/页面URL") print(resp.text)
- 方案2:纯requests实现,需要用抓包工具梳理所有cookie的生成逻辑:区分服务端下发的cookie、后续接口返回的cookie、JS加密生成的cookie,逐个模拟请求或生成逻辑,手动组装到requests的cookie字典中,同时要对齐浏览器的所有请求头、必要时做TLS指纹伪装,确保服务端下发全量cookie。
内容的提问来源于stack exchange,提问作者daviskren
相关产品推荐
相关产品推荐

