Playwright 浏览器抓包
Overview
基于 Python + Playwright 的浏览器自动化抓包方案。启动无头浏览器访问目标页面,监听并捕获页面发出的所有 XHR/Fetch 请求及其响应,输出为结构化 JSON,可进一步导出为 CSV / HAR / Markdown 报告。相比 mitmproxy/Charles,无需配置代理和证书,直接在浏览器侧拿数据,适合接口分析、爬虫逆向、数据采集。
When to Use
在以下场景触发此技能:
- 用户要求"抓取某网站的接口 / API 请求"
- 逆向分析前端页面调用了哪些后端接口
- 采集动态加载 (XHR/Fetch) 的数据, 而非静态 HTML
- 生成 HAR 文件供 Chrome DevTools / Charles 分析
- Mock 或篡改浏览器请求用于前端联调
- 需要带登录态抓取需鉴权的接口
不适用: 抓 TCP/UDP 网络层原始包 (改用 Wireshark/scapy)、移动原生 App 流量 (改用 mitmproxy+frida)、Node.js 服务端流量。
Prerequisites
执行抓包前, 确认环境就绪 (需 Python 3.8+):
pip install playwright
playwright install chromium # 首次必须, 约 150MB
验证: python -c "from playwright.async_api import async_playwright; print('ok')"
若环境缺失, 建议在隔离 venv 中安装, 不要污染全局环境; 完整步骤详见 references/playwright_capture_guide.md 第 8 节。
Workflow
1. 判断抓包目标
明确三件事, 决定脚本参数:
- 目标 URL — 抓哪个页面?
- 是否需登录态 — 接口是否要 cookie/token? 若是, 先准备
storage_state(见 step 3) - 过滤范围 — 全抓还是只抓特定 API? 用
--filter-url正则收窄, 如--filter-url "/api/v[0-9]+"
2. 快速抓包 (最常用)
直接调用 scripts/capture.py, 默认抓所有 XHR/Fetch:
python scripts/capture.py https://example.com -o result.json
常用参数组合:
# 抓特定 API + POST 请求
python scripts/capture.py https://app.example.com \
--filter-url "/api/(user|order)" --method POST -o api.json
# SPA 应用, 等数据节点出现
python scripts/capture.py https://spa.example.com \
--wait-selector ".data-list" --scroll 3 -o spa.json
# 带登录态
python scripts/capture.py https://app.example.com \
--storage-state login.json --ignore-https-errors -o auth.json
# 抓包同时保存最新登录态
python scripts/capture.py https://app.example.com \
--storage-state login.json --save-storage-state login_new.json -o r.json
3. 处理登录态 (需鉴权接口)
首次登录并保存:
# 参考 references/playwright_capture_guide.md 第 3 节
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://app.example.com/login")
await page.fill("#username", "USER")
await page.fill("#password", "PASS")
await page.click("button[type=submit]")
await page.wait_for_url("**/dashboard")
await context.storage_state(path="login.json")
之后抓包直接 --storage-state login.json 复用, 无需每次走登录流程。
4. 导出报告
用 scripts/exporter.py 把 JSON 转成易读格式:
# 一次性生成 CSV + HAR + Markdown
python scripts/exporter.py result.json --format all -o report
# 仅 HAR (导入 Chrome DevTools 分析)
python scripts/exporter.py result.json --format har -o result.har
# 仅 CSV (Excel 浏览)
python scripts/exporter.py result.json --format csv -o result.csv
HAR 文件可导入 Chrome DevTools (Network 面板) 或 Charles 复现分析; CSV 适合用 Excel 筛选排序; Markdown 适合直接阅读或贴入文档。
5. 自定义场景
SKILL.md 之外的进阶需求, 查阅 references/playwright_capture_guide.md:
| 需求 | 参考章节 | |---|---| | 修改请求头/body、Mock 响应 | 第 4 节 请求拦截 (page.route) | | 并发抓多个页面 | 第 7.2 节 | | 抓到请求后脱离浏览器重放 | 第 7.3 节 请求重放 | | 抓 WebSocket 消息 | 第 6.8 节 | | 抓包报错排查 | 第 9 节 故障排查 | | Playwright API 字段速查 | 第 1 节 |
Output Schema
capture.py 输出的 JSON 结构:
{
"meta": {"url": "...", "browser": "chromium", "total": 12, "elapsed_sec": 3.4, "captured_at": "..."},
"requests": [
{
"url": "https://api.example.com/users",
"method": "GET",
"resource_type": "xhr",
"request_headers": {...},
"post_data": null,
"status": 200,
"status_text": "OK",
"response_headers": {...},
"body_text": "{\"users\":[...]}",
"body_truncated": false,
"content_type": "application/json",
"elapsed_ms": 142.5,
"error": null
}
]
}
body_text: 文本类响应体 (JSON/HTML/文本), 已解码body_base64: 二进制响应体 (图片/视频等), base64 编码 (与 body_text 互斥)post_data_truncated: POST 体超过上限时为 true (上限由--max-body控制, 默认 2MB)body_truncated: 响应体超过上限时为 true, 仅保留前缀 (上限由--max-body控制, 默认 2MB)error: 非 null 表示该请求异常 (无响应/读取失败)
Key Pitfalls
(详见 references/playwright_capture_guide.md 第 6 节, 此处列高频项)
- 响应体只能读一次:
response.body()重复调用会抛错,capture.py已缓存 - 事件回调需
asyncio.create_task包装: 直接传 async 函数给page.on不会 await, body 读不到 - HTTPS 必加
--ignore-https-errors: 否则白屏, 请求事件不触发 - 大响应体截断: 默认 2MB 上限, 需全文时用
--max-body N(单位 MB) 调大, 或用--no-bodies - SPA 要等数据:
page.goto返回时 XHR 未必发完, 用--wait-selector等节点出现
Resources
scripts/
capture.py— 核心抓包脚本, 命令行工具。启动浏览器、监听 XHR/Fetch、输出 JSON。完整参数见python scripts/capture.py --help。可直接执行, 也可被读取后按需修改 (如调整过滤逻辑、添加 route 拦截)。exporter.py— 结果导出工具。把capture.py的 JSON 转为 CSV / HAR / Markdown。--format all一次生成三种。
references/
playwright_capture_guide.md— 深度参考手册。包含: Playwright 网络 API 字段速查、过滤模式、登录态持久化、请求拦截与修改 (page.route)、等待策略、常见坑点、进阶模式 (代理/并发/重放/HAR 流转)、环境准备、故障排查表。当 SKILL.md 未覆盖或需自定义实现时查阅此文件。
Scan to join WeChat group