源码教程:网络记录、请求拦截与控制台
网络功能用于解释“点击后发生了什么”。核心状态位于 BrowserInstance,通过页面事件监听记录请求、响应和失败,再由查询命令过滤和返回。
1. 从事件到请求记录
任务认领 Page 时安装监听器,为请求生成 requestId,保存 URL、方法、类型、时间及必要的正文摘要。响应和失败事件继续更新同一记录,在途计数则提供给等待逻辑。
记录有容量和截断限制,不是永久网络审计数据库。监听器挂载之前的请求不会凭空补齐;空列表可能只是还没有发生新请求,或过滤条件过严。
| 命令 | 实现及主要结果 |
|---|---|
get_requests | 按 URL 子串、resourceType、since 毫秒时间过滤,再取最新 limit 条;返回 requests/count/total、recordedSince、inflight |
get_response_body | 优先按 requestId 定位,也支持过滤或索引;从保留的响应记录读取正文,按 maxChars 裁剪 |
wait_for_response | 按 URL 条件等待响应,可回看近期记录;返回匹配响应及可取得的正文信息 |
同一 URL 可能连续请求多次。可靠关联应该使用 requestId,不能总取“最后一个相同 URL”就断言是某次按钮的结果。正文暂不可得与请求失败也不是同一个概念,应检查 bodyAvailable、truncated 和失败说明。
{"id":"1001","method":"get_requests","params":{"filter":"/api/demo","resourceType":"fetch","limit":10}}
获取实际 requestId 后再读取正文;不在示例中编造某个真实接口响应。页面跳转后仍可能读取缓存正文,但缓存不是无限期保存,不能作为长期持久化依据。
2. route 与 unroute
route 将 urlPattern 对应规则保存在任务状态中,注册到任务拥有的各个 Page;新页签认领后补上已有规则。这样不会为了拦截当前任务而直接修改其他任务的 Page。
规则包含 action、body、status、contentType。默认 action 是 abort;mock 用给定内容构造响应。允许通过的处理走浏览器继续请求流程。它不是完整的任意请求重写 API,命令表没有暴露的参数不能自行添加后期待生效。
{"id":"1001","method":"route","params":{"urlPattern":"**/api/demo","action":"mock","status":200,"contentType":"application/json","body":"{\"ok\":true,\"source\":\"fixture\"}"}}
unroute 传 pattern 时移除对应规则;不传时清除该任务页签上的规则和内存规则表。测试结束应解除拦截,否则后续读取到的可能仍是模拟响应。
3. 控制台记录
get_console_logs 返回任务捕获的浏览器控制台记录;clear_console_logs 清空这些记录。它们不是 Java 服务日志,也不等同于网络请求记录。console 输出、网络 body 和脚本异常可能含敏感资料,应分别限制展示与留档。
4. 本地验证
准备一个返回自增编号的本地接口,连续调用两次,验证 requestId 不同且各自正文对应正确编号。再测试超长响应的截断、网络失败、导航后的正文读取和 filter 无匹配。给接口挂 mock 后验证服务端计数没有增长,解除后再验证恢复真实请求。控制台测试使用虚构消息,不输出真实 token。
注册参数与 Java 入口
以下按 CommandTable 实际读取参数整理。* 表示注册层使用必填读取器;其余字段省略后由服务决定默认行为。带条件的入口仍需满足正文说明,例如上传文件来源、元素定位二选一。外层 id 不重复列出。
| 命令 | params 字段 | Java 入口 |
|---|---|---|
route | urlPattern*、action、body、status、contentType | route |
unroute | urlPattern | unroute |
get_requests | filter、resourceType、limit、since | getRequests |
wait_for_response | urlPattern*、timeoutSeconds、maxChars、lookBackSeconds | waitForResponse |
get_response_body | filter、index、maxChars、requestId | getResponseBody |
get_console_logs | 无 | getConsoleLogs |
clear_console_logs | 无 | clearConsoleLogs |
