批量保存浏览器 Network 中请求

该文章已生成可运行项目,

自动化、批量地把“浏览器 Network 面板里看到的所有请求(HTML、JS、CSS、图片、字体等)”保存下来,通常有三种思路,按“最接近 F12 体验 → 最自动化 → 最轻量”排序如下:

------------------------------------------------
1. 浏览器插件方案(最接近 F12、零代码)
   1. 装 Chrome/Edge 扩展 SingleFile  
      - 一键把当前页面连同所有静态资源打成 1 个 HTML(内嵌 base64)  
      - 支持“保存所有标签页”“自动保存”等批量模式,无需自己写脚本  
      - 可配置保留/去掉 JS、CSS、视频等  
      - 离线打开时与在线版几乎 1:1 还原,包括懒加载图片  
      - 适合“非程序员”或“临时一次性”批量归档  
      - 示例:打开 20 个页面 → 右键插件图标 → “保存选中的标签”即可一次性得到 20 个完整离线文件 

   2. 如要“纯原生”调试包,可在 DevTools → Network → 右键“Save all as HAR with content”,然后用  
      `chrome-har-capturer` 或 `har-export` 把 HAR 里每个 URL 重新拉取一遍;缺点是多一步解析,且不会自动改写路径。------------------------------------------------
2. 无头浏览器 + 拦截请求(最自动化、可编程)
   用 Playwright/Puppeteer 启动 Chromium,监听 `page.on('request')` / `page.on('response')`,在内存或本地直接写文件:  
   

```python
   from playwright.sync_api import sync_playwright
   import pathlib, hashlib, urllib.parse

   def save_all_responses(url, out_dir='site'):
       pathlib.Path(out_dir).mkdir(exist_ok=True)
       with sync_playwright() as p:
           browser = p.chromium.launch()
           page = browser.new_page()
           # 拦截所有响应
           def handle(res):
               if res.headers.get('content-type', '').startswith(('text/', 'application/javascript', 'image/', 'font/')):
                   body = res.body()          # bytes
                   u = urllib.parse.urlparse(res.url)
                   name = hashlib.md5(res.url.encode()).hexdigest() + pathlib.Path(u.path or '/index').suffix
                   (pathlib.Path(out_dir)/name).write_bytes(body)
                   print('saved', res.url, '->', name)
           page.on("response", handle)
           page.goto(url, wait_until='networkidle')
           page.context.close()
   ```


   优点  
   - 完全程序化,可批量循环 N 个页面  
   - 能拿到“真实”请求顺序、响应头、Cookie 等,与 Network 面板 100% 对齐  
   - 可把 URL 自动改写为本地相对路径,离线直接双击 index.html 浏览  
   缺点  
   - 对视频/流式大文件要额外处理。  

------------------------------------------------
3. 命令行一次性镜像(最轻量、无需写代码)
   如果目标站没有 heavy JS 渲染,用 wget 或 httrack 即可:
   

```bash
   # 下载 example.com 全站(含 CDN 资源),本地可浏览
   wget --mirror \
        --convert-links \
        --adjust-extension \
        --page-requisites \
        --span-hosts \
        --no-parent \
        -e robots=off \
        -P ./example_mirror \
        https://example.com
   ```


   解释  
   --mirror            递归抓取  
   --convert-links     把外链改成相对路径,离线可点  
   --span-hosts        允许跨域(CDN)  
   --page-requisites   拉取 JS/CSS/图片等“渲染必需品”  
   --no-parent         不跑到上级目录  
   适合“整站克隆”;缺点是单页应用(SPA)或需要登录/点击才能触发的 XHR 会抓不到,这时回到方案 2 用无头浏览器才行 

------------------------------------------------
结论速选  
- “我就想点几下完事”→ 装 SingleFile,批量保存标签页。  
- “每天要定时跑 100 个页面”→ Playwright/Puppeteer 监听 request/response,自动落盘。  
- “整站静态备份,无登录无 JS 动态”→ wget --mirror --span-hosts --convert-links 一条命令解决。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值