Chrome DevTools MCP 原理解析
2026-04-08 08:50:18
1. 核心组件架构
┌─────────────────┐
│ OpenClaw │ ← AI 助手(我)
│ (Agent) │
└────────┬────────┘
│
│ 通过 MCP 协议通信
↓
┌─────────────────┐
│ MCP Server │ ← Model Context Protocol 服务器
│ (Gateway) │
└────────┬────────┘
│
│ 通过 WebSocket 通信
↓
┌─────────────────┐
│ Chrome │ ← Chrome 浏览器(启用远程调试)
│ (CDP Server) │ Chrome DevTools Protocol
└─────────────────┘1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2. 关键技术
Chrome DevTools Protocol (CDP)
是什么:Chrome 浏览器提供的一套远程调试协议
工作方式:基于 WebSocket 的 JSON-RPC 通信
功能:可以控制浏览器的方方面面(页面导航、元素操作、网络拦截等)
Model Context Protocol (MCP)
是什么:AI Agent 与工具(如浏览器)之间的标准化协议
作用:让 AI 能够调用各种外部工具和服务
优势:统一的接口,易于扩展
3. 具体工作流程
以刚才的推文发布为例,详细解释每一步:
步骤 1:启动 Chrome 浏览器
工具调用:
bash
browser.start(
action: "start",
profile: "openclaw"
)1
2
3
4
2
3
4
实际发生的事情:
- OpenClaw 启动 Chrome 进程,带参数:bash
--remote-debugging-port=18800 --user-data-dir=/Users/ayu/.openclaw/browser/openclaw/user-data --headless=false1
2
3 - Chrome 在端口 18800 上启动 CDP 服务器
- Chrome 创建独立的用户数据目录(隔离你的个人 Chrome)
步骤 2:打开 Twitter 页面
工具调用:
bash
browser.open(
url: "https://x.com"
)1
2
3
2
3
实际发生的事情:
- 通过 CDP 发送命令到 Chrome:json
{ "id": 1, "method": "Page.navigate", "params": { "url": "https://x.com" } }1
2
3
4
5
6
7 - Chrome 导航到 Twitter 页面
- 返回页面 ID 和 WebSocket 连接信息
步骤 3:获取页面快照
工具调用:
bash
browser.snapshot()1
实际发生的事情:
- 通过 CDP 发送命令:json
{ "id": 2, "method": "DOM.getDocument" }1
2
3
4 - Chrome 返回整个 DOM 树
- AI 解析 DOM,找到:
- 登录按钮
- 发帖输入框
- 发布按钮
- 热搜列表
步骤 4:点击登录按钮
工具调用:
bash
browser.act(
kind: "click",
ref: "e53"
)1
2
3
4
2
3
4
实际发生的事情:
- 通过 CDP 发送命令:json
{ "id": 3, "method": "Runtime.evaluate", "params": { "expression": "document.querySelector('[ref=\"e53\"]').click()" } }1
2
3
4
5
6
7 - Chrome 执行 JavaScript 点击操作
- 触发 Twitter 的登录流程
步骤 5:输入推文内容
工具调用:
bash
browser.act(
kind: "type",
ref: "e192",
text: "这是一条通过OpenClaw自动发送的内容"
)1
2
3
4
5
2
3
4
5
实际发生的事情:
- 通过 CDP 发送命令:json
{ "id": 4, "method": "DOM.focus", "params": { "nodeId": 1234 } }1
2
3
4
5
6
7 - 然后模拟键盘输入:json
{ "id": 5, "method": "Input.dispatchKeyEvent", "params": { "type": "keyDown", "text": "这" } }1
2
3
4
5
6
7
8 - 逐个字符输入文本
步骤 6:点击发布按钮
工具调用:
bash
browser.act(
kind: "click",
ref: "e248"
)1
2
3
4
2
3
4
实际发生的事情:
- 同步骤 4 的点击操作
- Twitter 发送 POST 请求到服务器
- 推文发布成功,页面更新
4. 技术细节
WebSocket 通信流程
OpenClaw (Agent)
↓
──── WebSocket 连接 ───→
↓
Chrome CDP Server (localhost:18800)
↓
接收 JSON-RPC 请求
↓
执行浏览器操作
↓
──── 返回结果 ───→
↓
OpenClaw (Agent)1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
实际的 CDP 命令示例
1. 导航到页面
json
{
"id": 1,
"method": "Page.navigate",
"params": {
"url": "https://x.com",
"referrer": "https://www.google.com"
}
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
2. 查找元素
json
{
"id": 2,
"method": "DOM.querySelector",
"params": {
"nodeId": 1,
"selector": "textbox[placeholder*='What\\'s happening']"
}
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
3. 点击元素
json
{
"id": 3,
"method": "DOM.focus",
"params": {
"nodeId": 5678
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
4. 输入文本
json
{
"id": 4,
"method": "Input.insertText",
"params": {
"text": "这是一条通过OpenClaw自动发送的内容"
}
}1
2
3
4
5
6
7
2
3
4
5
6
7
5. 为什么需要独立的浏览器实例?
安全隔离
你的个人 Chrome:
├─ 用户数据: /Users/ayu/Library/Application Support/Google/Chrome/
├─ 已保存的密码
├─ 浏览历史
└─ 个人 Cookie
OpenClaw 的 Chrome:
├─ 用户数据: /Users/ayu/.openclaw/browser/openclaw/user-data/
├─ 独立的 Cookie 存储
├─ 独立的会话状态
└─ 完全隔离的环境1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
好处:
- ✅ 安全:AI 无法访问你的个人数据
- ✅ 隐私:自动化操作不影响你的正常浏览
- ✅ 独立:可以同时运行多个自动化任务
6. 完整的通信时序图
用户请求 → OpenClaw (Agent)
↓
解析意图 → "打开推特并发帖"
↓
生成工具调用 → browser.start()
↓
MCP Server → 建立 WebSocket 连接
↓
Chrome CDP → 启动浏览器 (端口 18800)
↓
返回连接信息 → { targetId, url, wsUrl }
↓
OpenClaw → browser.open(url="https://x.com")
↓
MCP Server → CDP: Page.navigate(url)
↓
Chrome → 加载 Twitter 页面
↓
OpenClaw → browser.snapshot()
↓
MCP Server → CDP: DOM.getDocument()
↓
Chrome → 返回 DOM 树
↓
OpenClaw → 解析 DOM,找到元素
↓
OpenClaw → browser.act(kind="click", ref="e53")
↓
MCP Server → CDP: Runtime.evaluate(click)
↓
Chrome → 执行点击
↓
OpenClaw → browser.act(kind="type", text="...")
↓
MCP Server → CDP: Input.dispatchKeyEvent(...)
↓
Chrome → 输入文本
↓
OpenClaw → browser.act(kind="click", ref="e248")
↓
MCP Server → CDP: Runtime.evaluate(click)
↓
Chrome → 发布推文
↓
返回成功 → OpenClaw → 用户1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
7. 关键优势
✅ 优势
- 真实浏览器环境:不是模拟的,而是真实的 Chrome
- 完整的功能:可以处理 JavaScript 渲染的动态内容
- 可视化:可以看到实际操作过程
- 灵活性:可以执行任何浏览器能做的事情
⚠️ 局限性
- 需要手动登录:为了安全,不能自动获取你的登录状态
- 速度相对较慢:需要真实的浏览器渲染
- 资源占用:需要运行完整的 Chrome 实例
8. 总结
整个流程的核心是:
- OpenClaw Agent:理解你的意图,生成工具调用
- MCP Server:提供标准化的工具接口
- Chrome CDP:提供浏览器控制能力
- WebSocket:实时双向通信
这就是为什么我能够:
- 🌐 打开真实的 Twitter 网站
- 🔐 让你手动登录(安全考虑)
- ⌨️ 自动输入文本
- 🚀 点击按钮发帖
整个过程都是通过 浏览器自动化 实现的,而不是通过 Twitter API。这意味着我可以看到你看到的,操作你能操作的,就像一个真正的用户在使用浏览器一样!