通过 Chrome DevTools MCP 增强 Agent 的浏览器操控能力

当我们用类似 Claude Code、Codex、Gemini CLI 等 AICoding Agent 写完代码,然后让它自动生成测试计划、自动调起浏览器来测试刚刚生成的代码,并根据反馈结果重新优化代码。在这个循环中,不需要人手动干预,完全依赖 AICoding Agent 自主操控,这不是一件非常美妙的事情吗?

这不就是当下爆火的 Harness Engineering 吗?正如 Harness Engineering: Why the Best AI Engineers in 2026 Stopped Writing Code 中说的那样[1]

A researcher tested the same AI model on the same coding benchmark twice. The first time, it scored 42%. The second time, it scored 78%. Same model. Same test. Same everything.

如上的框架的核心点在于:AICoding Agent 可以有效的操控浏览器。 本文将介绍三种浏览器控制方案:Playwright、Browser-use 以及伴随 Chrome M144 推出的最新利器 Chrome DevTools MCP,并通过多维度的对比,为大模型应用的架构选型提供参考。

一个简单的例子

我们可以把如上提到的 Harness Engineering 的过程简化成如下的流程图:

graph TD
    Start([需求输入]) --> A
    
    subgraph 规划与编码
        A[Codex 编写/修改目标代码] --> B[解析代码 & 生成测试计划]
        B --> C[构建可执行测试脚本]
    end
    
    subgraph 自动化执行与环境交互阶段
        C --> D[环境调度与协议打通]
        D -->|通过 CDP/MCP 控制本地 Mac 或远程集群浏览器| E[自动执行测试 / UI 交互]
    end
    
    subgraph 反馈与自我进化循环
        E --> F[捕获运行时反馈]
        F -->|提取控制台日志、DOM 状态、截图、网络抓包等| G{大模型结果评估}
        G -->|测试通过指标达标| H([任务完成 / 代码合入])
        G -->|测试失败 / 发现缺陷| I[AI 深度剖析错误根因]
        I -->|生成代码优化与修复策略| A
    end
    
    %% 定义节点样式
    classDef aiNode fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px;
    classDef envNode fill:#fff3e0,stroke:#ff9800,stroke-width:2px;
    classDef evaluateNode fill:#fce4ec,stroke:#e91e63,stroke-width:2px;
    
    class A,B,C,I aiNode;
    class D,E,F envNode;
    class G evaluateNode;

当然,现实中,很多的应用并非全部都依赖浏览器来做校验。比如:iOS、Android 等的客户端的开发还需要驱动对应的模拟器或者真机来调试。但是,本文主要介绍的还是 AI Coding Agent 与浏览器的交互。

Playwright

Playwright 原本是微软开源的现代 Web 自动化测试框架。在 Agent 爆发的早期,它成为了几乎所有 LLM 控制浏览器的底层“发动机”。大模型输出 Python 或 Node.js 代码,由 Playwright 翻译为底层的 WebSocket 指令发送给浏览器。

Playwright 的设计哲学是隔离与确定性。默认情况下,它每次启动都会拉起一个全新、无头的沙盒浏览器实例。

Playwright 的优势:

极高的执行速度和并发能力。由于是纯代码驱动,它在执行预定义好的大批量测试流水线时,稳定性无可匹敌。它提供了完善的 Cookie 注入、网络拦截等底层 API。

但是,在 AI 辅助场景下,Playwright 存在致命的问题:

  • “登录墙”噩梦: 当我们希望 Agent 帮我们排查内部系统或抓取受保护的数据时,Playwright 拉起的干净实例会被瞬间挡在登录页外。面对复杂的扫码或滑块验证码,AI 几乎束手无策。
  • UI 脆弱性: 一旦网页的 DOM 结构或 CSS 选择器发生微小变动,底层生成的 Playwright 代码就会直接报错崩溃,容错率极低。
  • 高昂的通信延迟: 传统的 Python -> Node.js Server -> 浏览器 架构,在需要高频次拉取几万个 DOM 节点供 LLM 分析时,会产生严重的 IPC(进程间通信)延迟。

辅助场景下,Playwright 是流水线上的“无情机器”,适合确定性的 E2E 测试和后台爬虫,但不适合作为需要与人类环境共享上下文的“AI 副驾驶”。

Browser-use

Browser-use 是目前开源社区极具代表性的高层 Agent 框架。值得注意的是,从 0.6.0 版本开始,Browser-use 作了一次重大底层重构:彻底抛弃了 Playwright,全面转向直接使用纯 CDP (Chrome DevTools Protocol) 与浏览器进行通信,以追求更极致的性能。

Browser-use 的核心哲学是视觉驱动。它不关心网页底层用了什么前端框架,而是直接对网页进行截图,提取出可交互元素的边界框(Bbox),并将这些带有坐标标签的图片喂给具备视觉能力的大模型(如 Claude 3.5 Sonnet)。大模型像人类一样“看”网页,然后输出诸如“点击带有购物车图标的按钮”的自然语言指令。

Browser-use 的优势:

极强的鲁棒性(抗干扰): 网页改版、按钮换位置、甚至底层的 React 状态乱了都没关系,只要人眼能看懂,模型就能看懂并操作。

开发门槛极低: 开发者无需编写复杂的 DOM 选择器代码,完全通过自然语言 Prompt 驱动复杂的探索性任务。

Browser-use 的劣势:

Token 成本与延迟双高: 每执行一步操作,都需要向多模态大模型传输庞大的图像 Token,这在进行大规模自动化评测或高频系统调度时,成本是难以接受的。

浅层交互限制: 它只能看到网页的“表象”。如果页面由于底层跨域问题加载失败,或者 JavaScript 抛出了深层的堆栈错误,Browser-use 是无法察觉的。

Browser-use 是灵活的“AI 司机”,非常适合处理面向消费者的非结构化网页任务(如机票比价、数据探索),但在企业级深水区显得有些昂贵且不够深入。

Chrome DevTools MCP

根据谷歌的开发者文档[2]

We shipped an enhancement to the Chrome DevTools MCP server that many of our users have been asking for: the ability for coding agents to directly connect to active browser sessions.

使用该特性,我们的 AI Coding Agent 可以实现如下的功能:

  • 复用现有的 Chrome 浏览器会话:AI Coding Agent 可以直接访问当前的浏览器会话,直接使用当前会话中的登录信息,而不需要在自动化测试的过程中增加额外的登录操作。
  • 访问正在使用浏览器控制台会话:当在 Chrome DevTools 网络面板中发现一个失败的网络请求时,可以直接选择该请求并让 AI Coding Agent 进行分析,这种 AI Coding Agent 与 人之间无缝协同的新能力让我感到非常兴奋。

如上的功能主要受益于谷歌 在 Chrome M144(beta)版本中新增的一项远程调试的功能:该功能允许 Chrome DevTools MCP 服务器接受远程调试请求。默认情况下,Chrome 会禁用远程调试连接,可以通过 chrome://inspect#remote-debugging 来启用该功能。

Gemini CLI 控制 Chrome

1.开启远程调试

在 Chrome 中访问 chrome://inspect#remote-debugging 并启用远程调试功能。

2.安装 Chrome DevTools MCP

1
gemini mcp add -s user chrome-devtools npx chrome-devtools-mcp@latest

3.修改配置文件
打开 ~/.gemini/settings.json 文件,修改 chrome-devtools 配置,在 args 中增加 --autoConnect 参数,这样 Gemini 就可以打开你当前正在使用的 Chrome 浏览器。如果不增加 --autoConnect 参数,Gemini 会打开一个新的 Chrome 浏览器实例。

1
2
3
4
5
6
7
8
9
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@latest",
"--autoConnect"
]
}
}

如果指定 --autoConnect 参数,Chrome DevTools MCP 将自动连接到由 channel 参数标识的、本地运行的 Chrome 浏览器(channel 默认为 stable)。

4.自动连接与授权
当 Gemini 认为需要操作 Chrome 时,Chrome DevTools MCP 会自动检测并连接到正在运行的 Chrome 实例,并弹出一个请求远程调试权限的对话框。用户授权后,Agent 便可获得当前浏览器会话的控制权。此时,浏览器会显示一个“Chrome 正由自动化测试软件控制”的横幅,以提示用户。

打开 github 网站,并进入到我的个人页面。

Gemini Code Assist 利用 Chrome DevTools MCP 操控 Chrome 浏览器的整体的流程如下所示:

sequenceDiagram
    participant User as 用户
    participant Agent as Gemini Code Assist
    participant MCPServer as Chrome DevTools MCP Server
    participant Chrome as Chrome 浏览器

    User->>Chrome: 启用远程调试 (chrome://inspect)
    User->>Agent: "打开 github 网站,并进入到我的个人页面,并分析加载性能"
    Agent->>MCPServer: 启动并传入 --autoConnect
    MCPServer->>Chrome: 请求连接到活跃会话
    Chrome-->>User: 弹出授权对话框
    User->>Chrome: 同意授权
    Chrome-->>MCPServer: 建立调试会话
    MCPServer-->>Agent: "连接已建立,可以开始调试"
    Agent->>MCPServer: 调用工具 (例如:network.getRequests)
    MCPServer->>Chrome: 通过 CDP 执行指令
    Chrome-->>MCPServer: 返回网络请求数据
    MCPServer-->>Agent: 返回网络请求数据
    Agent->>Agent: 分析数据并定位问题

Chrome DevTools MCP 的优势:

  • 复用活跃会话: 这是真正的杀手锏。当你在 Mac 上已经登录了公司内部的复杂集成系统或评测看板时,Agent 可以直接通过 MCP 连入你当前正在使用、带有完整 Cookie 和身份态的浏览器标签页。无需让 AI 去学习如何登录,实现了人类与 Agent 之间调试工作的无缝切换。

  • 深达内核的数据获取: 你的 Agent 可以直接调用底层协议,抓取 Network 面板的失败请求、读取 Console 报错日志、查看 Elements 面板的 DOM 树、甚至执行性能审计。这使得 AI 具备了高级前端工程师的排错能力。

  • 极简且安全的架构: 不依赖庞大的中间层,且每次连接都会有系统级的安全授权弹窗,非常契合企业对权限隔离的严格要求。

Chrome DevTools MCP 的劣势:

对大模型的逻辑推理和代码编写能力要求极高,因为它操作的不再是直观的 UI,而是底层的 JSON 数据和 JS 运行时。

整体看,Chrome DevTools MCP 配合 AI Coding Agent 是构建大模型自动化评测流水线、进行复杂集群环境调试的首选协议层方案。

不同方式之间的对比

评估维度 Playwright Browser-use (纯 CDP 版) Chrome DevTools MCP
抽象层级 底层通信 高层业务 Agent 标准协议中间件
驱动方式 纯代码驱动 视觉与自然语言 Function Calling
应对 UI 变化的稳定性 极低(高度依赖 DOM 结构) 极高(像人类一样视觉识别) 中等(依赖模型动态生成查询脚本)
状态共享与免登录能力 困难(默认沙盒环境) 弱(需 AI 自主操作登录表单) 极强(直接复用已登录会话)
Token 消耗 零消耗(无需 LLM 介入) 极高(大量多模态图像计算) 极低(仅传递结构化的短文本和 JSON)
核心适用场景 CI/CD 流水线、纯确定性爬虫 跨应用 C 端操作、非结构化任务辅助 内部复杂系统集成、实时异常排查调试

3 月 29 日,OpenClaw 的作者 Peter Steinberger 发了一篇推文,推文中也提到:

The Chrome extension has been removed since Google added native access in 144+, which is simpler, but yes, it does require a one-time setting change.

参考文献


  1. Harness Engineering: Why the Best AI Engineers in 2026 Stopped Writing Code ↩︎

  2. Let your Coding Agent debug your browser session with Chrome DevTools MCP ↩︎

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2026 Wang Wei
  • 本站访问人数: | 本站浏览次数:

请我喝杯咖啡吧~

微信