DrissionPage 入门教程
Cookies 管理
本教程共 42 篇 · 第 38 篇 · 更新于 2026-07-29 · 约 5 分钟阅读
DrissionPageDrissionPage 入门教程Cookies会话管理cookie 导入导出
38. Cookies 管理
本节目标:学会获取和设置 cookies,搞懂 cookies 的多种格式,能灵活导入导出。
获取 cookies
DrissionPage 提供了 cookies() 方法。
from DrissionPage import WebPage
page = WebPage()
page.get('https://example.com')
# 获取当前页面的 cookies
cookies = page.cookies()
print(cookies)
返回的是一个列表,每个元素是一个字典:
[
{'name': 'session_id', 'value': 'abc123', 'domain': '.example.com', 'path': '/'},
{'name': 'theme', 'value': 'dark', 'domain': '.example.com', 'path': '/'}
]
常用字段包括:name、value、domain、path、expires、secure、httpOnly。
获取所有域的 cookies
默认只返回当前域名的 cookies。
想拿所有域的,加个参数:
# 获取浏览器中所有 cookies
all_cookies = page.cookies(all_domains=True)
print(f'共 {len(all_cookies)} 个 cookies')
设置 cookies
用 set.cookies() 方法:
# 设置单个 cookie
page.set.cookies({'name': 'token', 'value': 'xyz789'})
# 设置多个 cookie
page.set.cookies([
{'name': 'a', 'value': '1'},
{'name': 'b', 'value': '2'}
])
也能传字符串:
# 字符串格式
page.set.cookies('name=value; token=abc123')
删除 cookies
# 删除指定 cookie
page.set.cookies({'name': 'token', 'value': '', 'expires': 0})
# 清除所有 cookies(浏览器模式)
page.browser.clear_cookies()
cookies 格式转换
DrissionPage 支持多种 cookies 格式互转。
转成字典
cookies = page.cookies()
# 转成 {name: value} 字典
cookie_dict = {c['name']: c['value'] for c in cookies}
print(cookie_dict)
转成字符串
# 拼成请求头格式的字符串
cookie_str = '; '.join(f'{c["name"]}={c["value"]}' for c in cookies)
print(cookie_str)
# 输出: session_id=abc123; theme=dark
转成 JSON
import json
cookies = page.cookies()
json_str = json.dumps(cookies, ensure_ascii=False, indent=2)
print(json_str)
导入 cookies 实现登录
一个常见用法:手动登录后导出 cookies,下次直接导入跳过登录。
# 第一次:手动登录后保存 cookies
page.get('https://example.com/login')
# ... 手动登录 ...
cookies = page.cookies()
import json
with open('cookies.json', 'w') as f:
json.dump(cookies, f)
# 第二次:直接导入 cookies
with open('cookies.json', 'r') as f:
saved_cookies = json.load(f)
page.get('https://example.com')
page.set.cookies(saved_cookies)
page.refresh() # 刷新后登录状态生效
SessionPage 的 cookies
SessionPage 也能管理 cookies,用法略有不同:
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://example.com')
# 获取 cookies(返回 RequestsCookieJar)
cookies = page.cookies()
print(cookies)
# 设置 cookies
page.session.cookies.set('name', 'value')
浏览器与 Session 之间共享 cookies
WebPage 模式可以在浏览器和数据包模式之间共享 cookies:
from DrissionPage import WebPage
page = WebPage()
# 浏览器模式登录
page.get('https://example.com/login')
page.ele('#username').input('user')
page.ele('#password').input('pass')
page.ele('#login-btn').click()
# 切换到 Session 模式
page.change_mode()
# Session 模式也能用登录状态
page.get('https://example.com/profile')
如 §31 所述,change_mode() 会保留 cookies 和会话状态。
实用技巧
只获取特定名称的 cookie
cookies = page.cookies()
token = next((c['value'] for c in cookies if c['name'] == 'token'), None)
print(f'token: {token}')
检查 cookie 是否存在
cookies = page.cookies()
has_token = any(c['name'] == 'token' for c in cookies)
print(f'有 token: {has_token}')
批量导入 cookies
# 从浏览器导出 cookies 给 SessionPage 用
from DrissionPage import WebPage, SessionPage
# 浏览器模式获取
wp = WebPage()
wp.get('https://example.com')
cookies = wp.cookies()
wp.quit()
# 转成 SessionPage 可用的格式
sp = SessionPage()
for c in cookies:
sp.session.cookies.set(c['name'], c['value'], domain=c.get('domain', ''))
sp.get('https://example.com')
注意事项
- domain 必须匹配:设置 cookie 时 domain 要和页面匹配
- secure 标志:HTTPS 页面的 cookie 可能带 secure 标志,HTTP 下无法读取
- httpOnly:httpOnly 的 cookie 没法通过 JS 读取,但
cookies()方法能拿到 - 过期时间:过期的 cookie 会被浏览器自动清理
小结
DrissionPage 的 cookies 管理很灵活。
cookies() 获取,set.cookies() 设置,支持字典、列表、字符串多种格式。
浏览器和 Session 之间可以通过 change_mode() 共享 cookies。