让 AI Agent 接管你真实的 Chrome:三条路线和踩过的五个坑

2251 字
11 分钟
让 AI Agent 接管你真实的 Chrome:三条路线和踩过的五个坑
让 AI Agent 接管你真实的 Chrome:三条路线和踩过的五个坑

之前让 AI 帮我干活,流程一直是这样的:我在浏览器里打开后台,截图,把关键信息复制出来贴给它,它给方案,我再切回浏览器操作。

来回几次就烦了。

无头浏览器我早就试过。Playwright 自带一个干净的 Chromium,跑起来很省事——问题是那个浏览器里什么都没有:没有我的登录态,没有我的 Cookie,没装我要用的扩展。你让它打开一个需要登录的后台,它只能停在登录页,然后告诉你”需要登录”。

我真正想要的是:让 AI 直接操作我正在用的这个 Chrome,带着我全部的登录态和已打开的标签页。

折腾了一晚上跑通了,顺便踩了五个坑。记一下。

三条路线,先说结论#

能让 AI 碰到真实 Chrome 的路线我试出来三条:

路线原理弹授权框能看到真实标签页
Playwright CLI 扩展模式chrome.debugger API,不碰调试端口❌ 不弹⚠️ 有条件
chrome-devtools-mcp(调试端口)CDP,走 chrome://inspect 开的口子✅ 每连接弹一次✅ 可以
无头 ChromiumPlaywright 自带浏览器—❌ 完全隔离

结论:想要”能操作真实标签页”,目前只有第二条路走得通。 但它的代价是那个弹窗,下面细说。

第一条路的坑更隐蔽,我最后会讲。

路线一:chrome-devtools-mcp 接上真实 Chrome#

这是 Google 官方的 MCP 服务器,工具很全:点击、填表、导航、截图、看控制台报错、抓网络请求、跑性能 trace,一共 30 个工具。

第一步:打开 Chrome 的远程调试口子#

新版 Chrome 加了一个机制,不用重启浏览器、也不用加启动参数就能开远程调试(我这边是 154.0.8037.98)。地址栏输入:

chrome://inspect/#remote-debugging

把那个开关打开。注意这个口子和老的 --remote-debugging-port 启动参数不是一回事——新版 Chrome 对那个端口做了限制,直接访问 /json/version 会返回 404,拿不到调试地址。所以必须走这个开关。

第二步:装 MCP 服务器#

Terminal window
npm install -g chrome-devtools-mcp@latest

我装到的版本是 1.10.1。

第三步:写配置文件#

我用的是 WorkBuddy,配置文件在 ~/.workbuddy-ai/mcp.json。其他客户端路径不一样(Claude Code 是 .mcp.json,Cursor 在设置界面里填),但格式都是标准的 MCP 配置。

{
"mcpServers": {
"chrome-devtools": {
"command": "C:\\Users\\你的用户名\\.workbuddy-ai\\binaries\\node\\versions\\22.22.2-3\\node.exe",
"args": [
"C:\\Users\\你的用户名\\.workbuddy-ai\\binaries\\node\\versions\\22.22.2-3\\node_modules\\chrome-devtools-mcp\\build\\src\\bin\\chrome-devtools-mcp.js",
"--autoConnect",
"--no-usage-statistics",
"--no-performance-crux"
]
}
}
}

几个参数值得说:

  • --autoConnect:自动连本机正在跑的 Chrome,不用自己找调试端口
  • --no-usage-statistics:关掉 Google 的用量上报
  • --no-performance-crux:这个建议加上。默认它会把你访问的 URL 发到 Google 的 CrUX 接口,换取真实用户的性能数据。考虑到这是你的日常浏览器,不想让浏览记录外流就关掉

command 我直接写了 node 的绝对路径。用 npx 也能跑,但 MCP 服务器是常驻进程,绝对路径启动更稳定,也避免 npx 每次去解析包。

第四步:信任它#

这一步最容易漏。改完配置文件不会自动生效,而且应用一般只在启动时读一次 mcp.json,所以:

  1. 重启客户端
  2. 找到连接器管理页(WorkBuddy 里是左侧边栏「专家·技能·连接器」→「连接器」页签)
  3. 点右上角的「自定义连接器」,找到 chrome-devtools,点「信任」

不点这个,AI 那边看到的工具列表里根本没有这些浏览器工具。

第五步:验证#

信任之后,让它列一下当前打开的页面。我第一次跑出来的结果是这样:

{
"content": [
{
"type": "text",
"text": "## Pages\n1: https://www.bilibili.com/video/BV1GHHn6NEnZ/ [selected]\n2: 首页-个性推荐-哔哩哔哩\n3: [74%][50%] SamplerCustomAdvanced (http://127.0.0.1:8188/)"
}
]
}

看到自己真实开着的标签页那一刻还是挺爽的。

踩坑记录#

坑 1:那个弹窗,每次连接都弹#

第一次连上,Chrome 会弹一个「要允许远程调试吗?」的框,只有「取消」和「允许」两个按钮。点允许,连上了。

问题是它不是只弹一次。

我一开始写了个脚本,每次执行一批操作就起一个新的 MCP 进程——结果连着弹了四五次,我在终端这边等,那边满屏幕找弹窗,非常难受。

查了一下,这是 Chrome 较新版本的设计行为:按连接弹窗,官方没有提供「永远允许」的选项。

所以:

  • 弹窗次数 = 你建立连接的次数
  • 想让 AI 干活不被打断,就得让连接常驻

正确做法是让客户端托管 MCP 进程(就是上面第四步的”信任”)。客户端会启动一次 MCP 服务器并保持长连接,Chrome 只在最开头弹一次,之后所有操作复用这条连接。

如果你自己写脚本调,那就把一批操作合并进同一次连接,别一次操作起一个进程。

坑 2:Playwright 扩展看起来更优雅,但有个隐藏条件#

Playwright 也有官方扩展路线,走的是 chrome.debugger API,完全不碰调试端口,所以 Chrome 永远不会弹那个框。听起来完美。

我装上试了,结果 tab-list 只返回一个页面——扩展自己的中继页 connect.html,看不到我任何真实标签页。

翻了扩展源码才搞明白。它 v0.4.0 的代码里写着:

PLAYWRIGHT_GROUP_TITLE = "Playwright"
PLAYWRIGHT_GROUP_TITLE_PREFIX = `${PLAYWRIGHT_GROUP_TITLE} · `
// 只列出该组内的标签
tabs.query({ groupId: g.id })

它只共享处于名为 Playwright 的 Chrome 标签组里的标签。 组外的标签它一概看不见。

而且断开连接时,扩展会把这个组里的标签全部解组(源码里的状态消息是 "All controlled tabs detached"),下次连接得重新挑。

坑 3:那个 token,用错了反而更糟#

扩展的弹窗里提示可以设一个环境变量绕过连接对话框:

Terminal window
export PLAYWRIGHT_MCP_EXTENSION_TOKEN=你的token

我设了,确实不弹了,4 秒就连接成功。但一个标签页都共享不到。

原因很反直觉:那个”连接对话框”正是让你挑选要共享哪些标签的步骤。你把对话框绕过去了,就等于没挑标签,自然什么都看不到。

所以这个 token 的定位很尴尬——它省掉的恰好是你需要的那一步。想用扩展路线,就别用 token,老老实实走对话框挑标签。

坑 4:Windows 上开着代理,探测本地端口会得到假 404#

这个坑跟浏览器无关,但排查过程被它带偏了很久。

我本机设了 http_proxy,用 curl 去探测 Chrome 的调试端口时一直返回 404,我一度以为”端口没开”。实际上请求走了代理,返回的是代理给的 404。

所有本地端口的探测都要加 --noproxy '*':

Terminal window
curl -s -D - -o /dev/null --noproxy '*' http://127.0.0.1:9222/json/version

同理,查 DNS 也一样——本机的 DNS 可能被透明代理劫持成 fake-ip(198.18.x.x),想看真实解析结果得走 DoH:

Terminal window
curl -s --noproxy '*' "https://dns.google/resolve?name=www.example.com&type=CNAME"

坑 5:会话生命周期,脚本跑完连接就断#

如果你用命令行工具(比如 playwright-cli)而不是 MCP,要注意它的守护进程会随发起命令的 shell 一起退出。

也就是说你没法”先 attach,然后下一条命令再操作”——每次都得在同一次调用里把 attach 和后续命令串起来:

Terminal window
playwright-cli attach --extension=chrome && playwright-cli -s=chrome tab-list

这个设计挺反直觉的,我一开始分成两条命令跑,第二条永远报 Browser 'chrome' is not open。

安全边界,说清楚#

这条路等于把你整个浏览器交给 AI——包括所有登录态。

我自己的判断标准是:

  • 日常浏览器和调试浏览器分开。我现在是拿日常这个 Chrome 在连,所以只在我盯着的时候开调试开关,用完就关
  • 别在有敏感后台登录态的时候开(网银、公司内部系统)
  • 那个 --no-performance-crux 记得加上,不然你访问的 URL 会外流
  • 自定义连接器在客户端里的定位就是”访问范围完全由你的配置决定”,没有预设边界

极简流程#

如果你只想快点跑通:

  1. Chrome 打开 chrome://inspect/#remote-debugging,开启开关
  2. npm install -g chrome-devtools-mcp@latest
  3. 写 mcp.json,命令加 --autoConnect --no-usage-statistics --no-performance-crux
  4. 重启客户端,去连接器管理页点「信任」
  5. 让它 list_pages,能看到你的标签页就成功了

写在最后#

三条路线试下来,chrome-devtools-mcp 是唯一能真正操作到真实标签页的,代价是那个躲不掉的授权弹窗——但只要你让客户端托管进程、保持长连接,它一辈子只弹一次。

Playwright 扩展那条路看起来更干净,但”只共享 Playwright 标签组内的标签”这个限制,加上那个会绕过挑标签步骤的 token,实际用起来比看起来麻烦。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
让 AI Agent 接管你真实的 Chrome:三条路线和踩过的五个坑
https://www.9ll.uk/posts/ai/aiagentchrome/
作者
HY
发布于
2026-10-07
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
把浏览器交给 AI 之后,我连 fork 都懒得点了
AI从 fork 仓库、补 wrangler 配置、点 Cloudflare 部署,到解析域名、加 Worker 路由、回头改自己博客的导航栏,这一整套我一次鼠标都没碰。记录一下 AI Agent 接管浏览器之后我懒成了什么样。
2
手机上的 AI Agent:用 Operit 帮我看住了挂机的虚拟机
推荐Operit 是一个安卓上的开源 AI Agent 平台,能直接操作手机。我拿它排查了虚拟机挂机几小时就卡死的问题,最后它给我写了个看门狗程序,检测到卡死就自动重启虚拟机和里面的两个实例。
3
Krea2 双采极清生图流:两段采样出图 + SeedVR2 int8 放大
AI分享一套自用的 Krea2 出图工作流:先低清一采定构图,二采重采样补细节,再走高清重绘,最后用 SeedVR2 int8 放大到 2K 以上。附全部模型、插件下载地址,以及 SeedVR2 3B / 7B 的选型建议。
4
MiniMax H3 一二采工作流:0.2 分辨率快出,二采补到 720p
AI分享一个 MiniMax H3 的 ComfyUI 一二采工作流:一采用 0.2 MP 快速出片,二采在 latent 空间放大重采样补回 720p。附模型、插件下载地址和我这边的实测耗时。
5
DSH 迁移 Docker 翻车四连:AI 全程远程替我修好了
AI把 Windows 上的 DSH(DeepSeek Harness)连同插件配置迁移到 NAS 的 Docker 容器,启动即崩、连炸四个坑。最后全靠 AI 通过 SSH 远程诊断、打补丁、重装依赖,全程自动修好。
随机文章随机推荐

评论区

Profile Image of the Author
HY
Hello, I'm HY.
公告
迷茫.... 为了访问速度,本站将会在11月上旬至中旬迁移到0dm.cn并完成备案
分类
标签
最新动态
站点统计
文章
74
分类
8
标签
192
总字数
161,979
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录