OpenCode 踩坑记:用 stealth-chrome MCP 接管真浏览器

882 字
4 分钟
OpenCode 踩坑记:用 stealth-chrome MCP 接管真浏览器

背景#

前几天要给新搭的两个博客站(一个中文一个英文)加 Google Search Console 的权限,顺便把服务账号也加进去。就一个”添加用户”的操作,想着让 OpenCode 帮我自动化算了。

结果 browser-control MCP 打开的无头浏览器直接被 Google 弹了验证码。换 Puppeteer ?还是弹。换 Playwright stealth ?一样。

搞了半小时,突然反应过来:我 Chrome 里本来就登录着 Google,为什么非要自己新开一个?

解决方案:stealth-chrome MCP#

思路摊开就很简单:不自己开浏览器,接管已经在用的那个

Chrome DevTools Protocol (CDP) 本来就是干这个的。你的登录态、Cookie、扩展——全都不用管,直接用。

我用 chrome-launcher 写了个几十行的 MCP Server,把 CDP 包了一层,注册到 OpenCode 的 MCP 配置里:

~/.config/opencode/opencode.jsonc
{
"mcp": {
"stealth-chrome": {
"type": "local",
"command": [
"node",
"/path/to/stealth-mcp-server.mjs"
],
"enabled": true,
"description": "真实 Chrome 接管,持久会话"
}
}
}

然后把原来的 browser-control 删掉,只留这一个。

连上之后效果立竿见影——Search Console 直接打开就是登录状态,什么验证码都没有。跟手动操作浏览器一样顺手。

踩坑实录#

当然,这过程也不是一帆风顺。记录五个真踩过的坑。

1. 按钮点了没反应#

Search Console 的”添加用户”按钮,用 stealth-chrome_click 点上去页面就跳转了。我一开始以为是 bug,重试了好几次,每次都跳到不相关的页面。

最后用 stealth-chrome_evaluate 执行 JS 的 element.click(),对话框正常弹出来了。

结论: SPA 里的事件绑定,用 JS 直接 click 比模拟点击可靠得多。click 点不动的,试试 evaluate。

2. Ref 编号会变#

每次页面渲染完,元素的 ref 编号(如 e42、e106)都可能变。同一个页面导航回来再 snapshot,ref 全不一样了。

第一次踩到这个的时候我还以为自己记错了。

结论: 如果要跨多次操作同一个页面,别硬编码 ref,用 JS 选择器定位元素更稳。

3. 选错了 dialog#

Search Console 页面里两个 [role="dialog"]——侧边导航栏一个、弹窗一个。document.querySelector('[role="dialog"]') 每次都拿到侧边栏那个。

结论:document.querySelectorAll(...) 取最后一个。

4. 设了 input.value 但 SPA 没反应#

input.value = 'xxx' 填完邮箱,点”添加”,提示”请输入有效的邮箱地址”。明明填入的地址是完整的,页面却不认。

因为 SPA 框架监听的是 input 事件,直接设 value 不会触发。要手动 dispatch:

input.value = 'blog-seo@xxx.iam.gserviceaccount.com';
input.dispatchEvent(new Event('input', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));

5. 链接跳不跳不由你#

Search Console 的设置页面里,“用户和权限”看起来是个可点文字,结果点下去直接跳到索引页了——它是个真的 <a href="..."> 链接,不是 SPA 路由。

结论: 点之前先 inspect 一下 a.href 的值,确定是路由跳转还是就地展开。

可用工具一览#

最终我实际用到的就这几个:

工具用在哪
stealth-chrome_navigate跳转到目标页面
stealth-chrome_snapshot看当前页面上有什么能点的
stealth-chrome_click点简单按钮
stealth-chrome_evaluate执行 JS(踩坑时的主力)
stealth-chrome_screenshot截图确认状态

适用场景#

凡是需要已登录才能操作的网站——Search Console、Cloudflare Dashboard、Gmail——stealth-chrome 都能搞定。浏览器开着就行。

总结#

stealth-chrome MCP 的价值就一句话:别跟浏览器验证作对,用你已经登录好的那个

配置一次、常驻后台、随便折腾。反正 Chrome 别关就行。

支持与分享

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

打赏
OpenCode 踩坑记:用 stealth-chrome MCP 接管真浏览器
https://blog.zinzin.cc/posts/stealth-chrome-mcp/
作者
gzdyj
发布于
2026-07-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
gzdyj
代码与生活,不断前行。
公告
欢迎来到我的博客!这里记录技术成长与生活思考,欢迎留言交流。
分类
标签
最新动态
站点统计
文章
15
分类
9
标签
47
总字数
15,828
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.14.5
文章许可
CC BY-NC-SA 4.0