进阶 / Advanced

网络拦截与改写

network route 通过 CDP 的 Fetch 域拦截匹配到的请求—— 无需代理,也不需要扩展权限。你可以 mock 一个假响应、改写发出去的请求、 篡改真实响应,或者干脆屏蔽掉某些流量。动词与字段都对齐了 Playwright 的习惯, 上手几乎零成本。

三种模式

一条 network route 规则属于哪种模式,取决于你传了哪些 flag。 三者的介入时机各不相同:

🎭 Mock 响应

--body / --status / --header / --content-type:直接返回假响应,请求短路,永不发出

✏️ 改写请求

--method / --set-body / --set-header / --rewrite-url:改动发出去的请求,再让真实响应回来。

🩹 编辑真实响应

--edit-status / --edit-header / --replace:请求照常发出,拿回真实响应后再改。

ℹ️ 三种模式的取舍
Mock 适合前端还没有后端时造数据;改写请求适合注入鉴权头或换环境; 编辑真实响应适合强制某个错误态、或者不搭 mock server 就能补一个字段。

Mock 响应

传入 --body 等 flag,请求会被直接 fulfill——一个假响应立刻返回, 真实网络请求根本不会发出。适合造空列表、造权限态、隔离后端。

bash
# Mock 响应(fulfill —— 请求永不离开浏览器)
$ chrome-use network route "**/api/users" --body '{"users":[]}' --status 200 --content-type application/json
$ chrome-use network route "**/api/me" --body '{"vip":true}' --header X-From=mock

改写发出去的请求

传入 --method--set-body--set-header--rewrite-url, 请求会带着你的改动继续发出(continue with overrides),随后真实响应照常回来。 注入测试鉴权头、替换请求体、或把流量导到 staging 都靠它。

bash
# 改写发出去的请求(真实响应仍会返回)
$ chrome-use network route "**/api/save" --method POST --set-header Authorization="Bearer test"
$ chrome-use network route "**/api/save" --set-body '{"x":1}'          # 替换请求体
$ chrome-use network route "**/v1/*" --rewrite-url https://staging.example.com/v1/thing

编辑真实响应

传入 --edit-status--edit-header--replace 'from=>to', 请求会正常发出、真实响应回来后再被你篡改,页面看到的是改过的版本。 适合把接口强制成 503 错误态,或在不改后端的前提下替换响应里的一个字段。

bash
# 编辑真实响应(请求发出、响应回来、再改)
$ chrome-use network route "**/api/me" --edit-status 503                # 覆盖状态码
$ chrome-use network route "**/api/me" --edit-header X-Env=test         # 新增/覆盖一个响应头
$ chrome-use network route "**/api/me" --replace 'prod=>staging'        # 在真实响应体里做子串替换(可重复)
$ chrome-use network route "**/api/me" --set-json data.user.vip=true     # 结构化编辑响应体里的一个 JSON 字段

--set-json <dot.path>=<value> 按点号路径定位到响应体 JSON 里的一个字段, 创建或覆盖它——嵌套路径会自动补全中间的对象。响应体不是合法 JSON 时, 它会自动退化成字符串替换,跟 --replace 一样安全,不会因为解析失败而报错。

✅ 优先级与可重复性
同一条规则同时给了 mock 和 rewrite 时,mock 胜出--header / --set-header / --edit-header / --replace / --set-json 都是可重复的;请求/响应头会合并覆盖在原始头之上。
⚠️ 别改顶层文档导航
编辑顶层文档(top-level document)导航的状态码会扰乱页面加载。 需要时用 --resource-type xhr,fetch 把响应编辑限定到 API 调用上。

屏蔽与按资源类型限定

--abort 直接掐断一条请求。任何规则都可以用 --resource-type 限定作用范围,避免误伤其他流量。

bash
# 彻底屏蔽
$ chrome-use network route "**/analytics" --abort

# 把规则限定到某些资源类型
$ chrome-use network route "**/*.json" --abort --resource-type xhr,fetch

观察与录制流量

改写之前,先看清楚都有哪些请求在飞。network requests 列出已捕获的流量, --clear 从头开始记;network har 则把整段流量录成标准的 HAR 文件。

bash
$ chrome-use network requests --clear        # 清空并重新开始捕获
$ chrome-use network requests                # 查看都发出了哪些请求

$ chrome-use network har start               # 录制全部流量
# ... 执行你的操作 ...
$ chrome-use network har stop /tmp/trace.har

清理规则

所有路由规则是常驻的,会一直生效直到你显式移除。收工时用 network unroute 一次性丢弃全部规则,避免影响后续会话。

bash
$ chrome-use network unroute                 # 移除所有路由规则
✅ 收尾习惯
路由是全局副作用。用完记得 network unroute, 否则一条 --abort 可能会悄悄影响下一个任务的页面。

相关阅读