AI Agent 使用无屏浏览器完成搜索、登录、表单填写和网页操作时,真正难排查的往往不是页面截图,而是页面背后的网络行为:哪个请求失败了、接口返回了什么、响应耗时为何突然升高,以及某个资源是否被重定向。SeimiRender V1.2.0 新增 CDP 网络录制能力,可以在渲染过程中记录 HTTP 请求和响应,并导出标准 HAR 1.2 文件,让浏览器自动化调试进入更可观测的阶段。
HAR 记录了什么
这次功能面向渲染期间的网络流量,记录内容包括:
- 请求和响应的 headers
- HTTP 状态码
- 响应体
- 请求耗时
- 全量 HTTP 请求/响应信息
生成的文件遵循 HAR 1.2 标准,可以直接导入 Chrome DevTools、Charles 等工具。相比只保存最终 HTML 或截图,HAR 能保留页面加载过程中的证据链:主文档如何返回、脚本加载是否失败、接口是否返回 401、静态资源是否发生重试或重定向。
这对 AI 浏览器尤其有价值。Agent 的一次任务可能经过多个页面、多个 API 和复杂的前端状态转换,最终结果不正确时,HAR 可以帮助开发者判断问题发生在导航、接口、鉴权还是页面脚本层。
启动时打开 CDP 端口
CDP 网络录制需要以 --remote-debugging-port 启动 SeimiRender。下面是一个按常见部署方式编写的示例命令;如果实际二进制名称或目标参数不同,只需要替换对应部分:
./seimirender \
--remote-debugging-port=9222 \
--url="https://example.com" \
--output-har="./artifacts/example.har"
其中,--remote-debugging-port=9222 是启用 CDP 能力的关键。生产环境中不要把调试端口直接暴露到公网,建议只绑定在本机或受限网络接口,并通过容器网络、SSH 隧道或访问控制来保护它。
如果系统通过 MCP 驱动浏览器,MCP 侧同步提供了 get_har 工具。一个典型的调用流程可以抽象为:
{
"name": "get_har",
"arguments": {
"session_id": "session-123"
}
}
这里的 session_id 和参数结构应以当前 MCP 服务的工具定义为准。调用成功后,客户端可以把返回的 HAR 内容写入文件,再交给浏览器开发工具分析。
用 Python 快速检查 HAR
HAR 是 JSON 文件,适合在导入 DevTools 之前做自动化检查。例如,下面的脚本会统计请求数量、失败响应和最慢的请求,适合放进 Agent 任务的诊断流程:
#!/usr/bin/env python3
import json
import sys
from pathlib import Path
def inspect_har(filename: str) -> None:
data = json.loads(Path(filename).read_text(encoding="utf-8"))
log = data.get("log", {})
entries = log.get("entries", [])
failures = []
for entry in entries:
response = entry.get("response", {})
status = response.get("status", 0)
if status >= 400 or status == 0:
failures.append((status, entry.get("request", {}).get("url", "")))
slowest = sorted(
entries,
key=lambda item: item.get("time", 0),
reverse=True,
)[:5]
print(f"HAR version: {log.get('version', 'unknown')}")
print(f"Total requests: {len(entries)}")
print(f"Failed responses: {len(failures)}")
if failures:
print("\\nFailures:")
for status, url in failures:
print(f" {status} {url}")
print("\\nSlowest requests:")
for entry in slowest:
request = entry.get("request", {})
print(f" {entry.get('time', 0):8.1f} ms {request.get('method', '')} {request.get('url', '')}")
if __name__ == "__main__":
if len(sys.argv) != 2:
raise SystemExit(f"Usage: {sys.argv[0]} path/to/trace.har")
inspect_har(sys.argv[1])
运行方式:
python inspect_har.py ./artifacts/example.har
这个检查器不依赖第三方库,可以作为 CI 任务的一部分。例如,可以对关键任务设置规则:登录接口不能返回 401,核心 API 不能出现 5xx,最慢请求不能超过预设阈值。具体阈值需要结合页面和网络环境确定,不应把一次偶发的慢请求直接视为系统故障。
从“结果不对”定位到具体请求
一套实用的排查流程可以这样组织:
- 让 Agent 在独立会话中执行任务,并确保启动参数包含
--remote-debugging-port。 - 任务结束后通过
get_har或对应的 HAR 导出能力取得网络记录。 - 先按状态码筛选 4xx、5xx 和状态码为零的条目。
- 再检查重定向链、鉴权 headers、请求体和响应体。
- 对耗时排序,确认瓶颈是 DNS、接口服务、资源下载还是页面脚本等待。
- 将 HAR 导入 Chrome DevTools 或 Charles,结合时间线复现问题。
需要注意的是,HAR 不是只读的“最终结果快照”。它记录了大量可能包含业务数据的请求和响应,因此应当和日志、截图、浏览器存储一样纳入敏感信息管理。尤其要关注 Cookie、Authorization、表单字段、用户输入和响应体中的个人数据。共享 HAR 前应进行脱敏,生产环境也应限制文件保存周期和访问权限。
此外,全量记录会增加存储和处理成本。批量运行 Agent 时,建议按任务 ID 保存文件,控制单次任务的 HAR 大小,并在任务成功时只保留摘要、任务失败时保留完整记录。这样既能支持故障分析,也不会让诊断数据无限增长。
适合怎样采用
SeimiRender V1.2.0 的 HAR 能力适合三类场景:开发阶段分析网页兼容性,测试阶段验证关键接口和资源加载,生产阶段诊断偶发的 Agent 失败。启用它的前提是正确开启远程调试端口,并确认 MCP 客户端能够调用 get_har 或使用等价的导出方式。
落地时可以先从失败任务采集完整 HAR,再逐步增加自动化规则。对成功任务保留请求数量、错误数量、总耗时和最慢请求等摘要;对失败任务保存原始 HAR,并配合脱敏和权限控制。这样,网络录制就不只是一个调试开关,而是 AI 浏览器可观测性链路中的一部分。