返回 Skill 列表
extension
分类: 数据与分析无需 API Key

数据抓包代码

使用 Python + Playwright 进行浏览器自动化抓包, 捕获页面发出的 XHR 和 Fetch 请求与响应。当用户需要抓取网页接口、分析 API 请求、逆向前端接口、采集动态加载的数据、Mock 或修改浏览器请求、生成 HAR 或 CSV 报告时使用此技能。适用场景包括: 抓这个网站的接口、看看这个页面请求了哪些 API、帮我抓包分析、逆向这个 App 的 H5 接口、生成 HAR 文件、Mock 接口响应。不适用于抓 TCP/UDP 网络层原始包 (用 Wireshark 或 scapy)、抓移动原生 App 流量 (用 mitmproxy 加 frida)。

person作者: user_7e77ad98hubcommunity

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. 判断抓包目标

明确三件事, 决定脚本参数:

  1. 目标 URL — 抓哪个页面?
  2. 是否需登录态 — 接口是否要 cookie/token? 若是, 先准备 storage_state (见 step 3)
  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 未覆盖或需自定义实现时查阅此文件。