必须复用真实浏览器实例生成动态cookies,纯python库无法满足现代网站要求;推荐playwright实现无头、多上下文隔离及自动续期,需按域名创建独立browser_context、过滤敏感字段并加密存储。

动态Cookies生成必须绑定真实浏览器上下文
纯Python的requests或httpx无法生成现代网站所需的完整Cookies(比如含__Secure-前缀、SameSite=Strict、HttpOnly等属性的),因为这些字段由浏览器引擎在JS执行、重定向、CSP校验等环节动态注入。直接用session.cookies.set()硬塞值,99%会触发风控或返回空响应。
真正可行的方式是复用真实浏览器实例:
- 用
selenium启动Chrome或Edge,加载目标页面后调用driver.get_cookies()提取 - 更轻量的是
playwright(推荐):支持无头、多上下文隔离、自动处理localStorage和service worker带来的Cookie副作用 - 绝对不要用
fake_useragent+requests.Session拼凑Headers和Cookies——这类“静态Cookie池”在登录态维持超过2分钟基本失效
Playwright中按域名隔离Cookies并自动续期
同一个浏览器实例里不同域名的Cookies会互相污染(比如login.example.com和api.example.com共享document.cookie但后端校验逻辑不同),必须用独立browser_context隔离。
实操要点:
- 每个目标域名创建专属
browser.new_context(),设置ignore_https_errors=True应对自签名证书 - 用
context.add_init_script()注入UA和时区,避免因navigator.webdriver为true被识别 - 续期不靠定时器轮询,而是在每次请求前检查
context.cookies("https://target.com")是否含expires字段且剩余page.goto()刷新 - 避免
context.close()后Cookie丢失:用context.storage_state(path="cookies.json")持久化,下次直接browser.new_context(storage_state="cookies.json")
并发管理时Cookies不能共享线程/进程
多个爬虫线程共用同一组Cookies,必然导致401 Unauthorized或403 Forbidden——后端通过X-Forwarded-For、User-Agent指纹、请求时间戳做会话绑定,同一Cookie被多IP/多UA使用立刻封禁。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
正确做法是:
- 为每个并发任务分配独立
browser_context,而非复用browser对象 - 用
asyncio.Semaphore(3)限制同时活跃的上下文数(Playwright对内存敏感,>5个上下文易OOM) - Linux下用
--disable-dev-shm-usage启动参数,防止/dev/shm空间不足导致chrome failed to start - 别用
multiprocessing——Playwright的browser对象不可序列化,跨进程传参会报PicklingError
存储和加载Cookies要过滤敏感字段
context.storage_state()导出的JSON包含origin、name、value、domain、path等,但部分网站会把token编码进value(如Base64嵌套JWT),直接存盘有泄露风险。
安全处理方式:
- 加载前用
json.load()读取后,遍历cookies数组,对name匹配r"^(token|auth|session)"的项,value字段做AES加密(密钥从环境变量读取) - 写入磁盘时删掉
httpOnly为True的条目——这类Cookie无法被JS读取,Python里也无需保存 - 避免用
pickle序列化Cookies对象:反序列化可能执行任意代码,且不兼容Python版本升级
最麻烦的不是生成,而是让每个Cookie在72小时内稳定通过行为验证——这取决于你模拟滚动、鼠标轨迹、Canvas指纹的逼真度,而不是Cookie本身。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










