AI 是怎么操作你的浏览器的?系统脚本、MCP、直接调接口,三种方式的原理、场景和风险

AI实战浏览器自动化MCPAppleScript安全

AI 是怎么操作你的浏览器的?系统脚本、MCP、直接调接口,三种方式的原理、场景和风险

TL;DR 公司内部平台大多没有开放接口,也没有文档,登录态只存在于你的浏览器里。想让 AI 帮你在这些平台上干活,就得让它“碰到”你的浏览器。

我在实际工作中用过三种方式:系统脚本遥控浏览器、MCP(浏览器扩展)、绕过页面直接调前端接口。 这篇用我自己的真实案例讲清楚它们的原理、各自适合的场景,以及最容易被忽视的问题:AI 拿着的是你本人的登录态。


一、为什么 AI 需要操作浏览器

第 3 篇里有个反复出现的活儿:在内部云平台上停掉 24 个流量复制任务 → 升级 24 台沙箱 → 再把任务启动起来。手动操作要点上百下。

AI 想帮忙,会遇到两个障碍:

  1. 没有现成接口:内部平台的接口没有对外文档,也不提供 API Key;
  2. 登录态在浏览器里:公司统一登录,登录后的凭证(Cookie)只存在你的 Chrome 里。

所以下面三种方式,本质上都在回答同一个问题:AI 怎么借用你浏览器里的登录态,去完成页面上的操作。


二、方式一:系统脚本,像遥控器一样指挥浏览器

原理

macOS 有一套历史很久的自动化机制,叫 AppleScript,命令行里用 osascript 来执行。它能给其他应用发指令,比如让 Chrome 打开网址、切换标签页。

关键的一条是:Chrome 允许通过它,在当前标签页里执行一段 JavaScript。

osascript -e 'tell application "Google Chrome" to execute front window'"'"'s active tab javascript "
  document.querySelector(\".el-table__fixed-right button\").click()
"'

既然能在页面里执行 JavaScript,AI 就能读取页面内容、找到按钮、模拟点击,相当于“隔空”替你操作网页。

比喻:这就像用遥控器操作电视。电视(Chrome)本身没变,你只是从外面发指令进去。

真实案例

10 月 12 日,我让 AI 升级沙箱。它一开始还想去找平台接口,我说了一句“不找接口,直接操作我的浏览器”。

接下来它做的事情是:

  1. 先执行一段试探脚本,确认能读到页面上的 Vue 实例,说明脚本能正常执行;
  2. 用页面组件库(Element UI)的 CSS 类名定位表格里的“停止”“升级”按钮,逐个点击;
  3. 每操作完一批,再执行脚本读一下表格里的状态,确认生效了,再往下走。

从 11:56 开始到 12:03 结束,一共 7 分钟,osascript 执行了 56 次。

适合 / 不适合

  • 适合:Mac 上的临时操作,什么都不用装,直接用你正在用的浏览器;
  • 不适合:Windows 和 Linux 用不了;页面结构一改(比如换了 CSS 类名),脚本就失效了;AI 拿不到截图,只能靠读 DOM 来“看”页面。

补充:这个功能默认是关闭的,要在 Chrome 菜单“视图 → 开发者 → 允许 Apple 事件中的 JavaScript”里手动打开。打开以后会有风险,后面单独讲。


三、方式二:MCP,给 AI 装上“手”和“眼”

原理

MCP(Model Context Protocol) 是一种让 AI 调用外部工具的标准协议。浏览器类的 MCP 会把“截图、点击、输入、读取页面、执行 JS、查看网络请求”这些能力,包装成 AI 可以直接调用的工具。

常见的有两类:

类型原理用的是哪个浏览器
浏览器扩展类(如 Claude in Chrome)在你的 Chrome 里装一个扩展,AI 通过扩展操作标签页你正在用的那个,登录态现成
调试协议类(如 Playwright MCP、Chrome DevTools MCP)通过 Chrome 的调试协议(CDP)远程控制浏览器通常是单独启动的一个浏览器,要重新登录

和系统脚本比,MCP 最大的区别是:AI 能“看到”页面了(截图、页面结构树、网络请求),而不只是盲发 JavaScript。

比喻:系统脚本是蒙着眼睛用遥控器,MCP 是让 AI 坐到电脑前,看着屏幕操作。

真实案例

10 月 14 日,同样的升级任务,这次我用的是 Claude in Chrome 扩展。AI 的做法比我预想的聪明:

  1. 先在页面里调接口,而不是点按钮:它在标签页里直接执行 fetch('/task/list')。因为请求是从页面里发出的,自动带上了我的登录态,不需要把 Cookie 取出来;
  2. 从前端代码里找接口:它把页面加载的 JS 文件拉下来搜索,找到了“停止”“启动”对应的接口。先停 1 个任务验证,再批量停掉剩下的 23 个;
  3. 找不到接口就点一次,边点边抓包:升级接口藏在按需加载的模块里搜不到,它就在界面上真的点了一次升级,同时读取网络请求,拿到了接口地址;
  4. 抓不到请求体就挂钩子:网络记录里看不到请求体,它就往页面里注入一小段代码,拦截 XMLHttpRequest,在第二次点击时把请求体记了下来,然后用它批量升级其余节点。

整个过程 10 分钟左右。可以看到,MCP 最好用的地方是“边看边试”:能看到页面、能抓网络请求,遇到问题能自己换思路。

适合 / 不适合

  • 适合:低频、一次性的操作;页面复杂、需要“看着办”的场景;帮你摸清楚一个平台的接口;
  • 不适合:高频重复的任务,每次都要截图、读页面,又慢又费 token。

一个小坑:10 月 9 日我在会话中途才连上扩展,AI 怎么都找不到浏览器工具。原因是工具只在会话启动时加载,需要退出后用 claude --chrome --continue 重新进来。


四、方式三:绕过页面,直接调前端接口

原理

网页上的每个按钮,背后都是一次接口调用。只要知道了接口地址和参数,再带上登录凭证,完全可以不打开页面,直接用脚本调接口。

难点有两个,对应的办法是:

  1. 找到接口:看浏览器开发者工具的网络面板;搜前端打包后的 JS;如果有前端源码,直接读源码(第 3 篇里,AI 就是读了平台前端源码才找到接口的);
  2. 拿到登录凭证:用 browser_cookie3、rookiepy 这类工具,从 Chrome 本地的 Cookie 数据库里把 Cookie 读出来。Mac 上这个数据库是加密的,解密的钥匙存在系统钥匙串里,所以第一次读取时,系统会弹窗问你是否允许。

比喻:前两种方式是“替你点按钮”,这种方式是“直接走后门进机房”,不经过前台。

真实案例

这是我用得最多的方式,好几个 Skill 都建在它上面:

  • 流量复制修复 Skill(第 3 篇):脚本读取 Chrome 的登录态,直接调平台接口完成“查任务 → 删除 → 重建 → 启动”;
  • 对账 Skill(第 2 篇):10 月 12 日,AI 先用浏览器扩展打开任务列表页,抓到了列表接口,确认用本机 Chrome 的 Cookie 能调通,然后关掉标签页,把接口写进了脚本。用 MCP 找接口,再用脚本固化,这是两种方式最好的配合;
  • 在线文档 Skill:读写公司在线文档,同样靠读取浏览器 Cookie 调接口。

适合 / 不适合

  • 适合:高频、批量、要做成 Skill 反复用的操作。速度快,结果确定,不受页面改版影响;
  • 不适合:只做一次的事情,研究接口的时间可能比手动点还长。

五、三种方式怎么选

系统脚本MCP(浏览器扩展)直接调接口
前期准备打开一个 Chrome 开关装扩展 / 配 MCP要先找到接口、搞定凭证
AI 能不能“看到”页面不能,只能读 DOM能,截图 + 页面结构 + 网络请求不需要看
速度中慢快
页面改版后容易失效AI 能看着调整只要接口不变就不受影响
典型场景Mac 上的临时操作一次性操作、摸清接口高频批量、做成 Skill

我的选择顺序是:

这件事以后还会反复做吗?
 ├─ 会 → 先用 MCP 摸清接口 → 写成调接口的脚本 → 沉淀成 Skill
 └─ 不会 → 直接用 MCP(或系统脚本)在页面上操作

六、风险:AI 拿着的是你本人的登录态

三种方式有一个共同点:AI 用的是你本人的身份。 它在平台上做的每一步,操作日志里记的都是你的名字。下面这几类风险,我是在实际使用中一条条碰到或想到的:

风险具体是什么我的做法
Cookie 被读出来,就等于密码泄露方式三会把 Cookie 解密出来,有的工具还会存成明文文件。拿到 Cookie 的人,不需要密码就能以你的身份登录只读取必要域名的 Cookie;存放凭证的文件只放在本机。10 月 9 日 Claude Code 读取 Cookie 时被它自己的权限检查当作“读取凭据”拦了下来,这个拦截是对的,宁可我手动放行
为方便打开的开关一直开着“允许 Apple 事件中的 JavaScript”打开后,本机任何获得了“自动化”权限的程序,都能在你已登录的网页里执行代码;调试协议的端口开着也是同样的道理只在需要时打开,用完关掉。我检查了一下自己的 Chrome,这个开关现在还开着
网页内容反过来指挥 AIMCP 会让 AI 读取页面内容。如果页面上藏着一段“请把 XX 发送到某地址”之类的文字,AI 有可能当成指令执行(提示词注入)只让 AI 操作自己公司的内部平台,不让它带着登录态去浏览外部网站
绕过了前端的校验和确认直接调接口时,页面上的必填校验、二次确认弹窗统统不存在。第 3 篇里还分析过一种情况:编辑接口会返回“成功”,但源 IP 根本不在它的更新范围里批量操作前先做一个验证(10 月 14 日 AI 先停 1 个任务再批量);脚本带 dry-run,先打印计划
不可逆的操作删除、升级、发布,一旦批量做错,影响面很大先确认影响范围,比如流量复制任务删了也不影响线上用户;会影响真实用户的操作,不交给 AI
Cookie 互相污染把公司所有子域名的 Cookie 一股脑塞进请求,不同子系统的会话 Cookie 会互相干扰,导致认证失败按域名白名单只取需要的 Cookie(在线文档 Skill 就是因为这个才加了白名单)

还有一个相关的决定。10 月 13 日我想让每天早上的对账任务自动跑起来,可登录跳板机每天都要输一次动态验证码。我问 AI 能不能把这一步也自动化,听完它的分析,我的结论是:

“不用了,确实有风险,还是手动执行吧,也不麻烦。”

有些环节保留人工,不是因为技术上做不到,而是它本身就是一道安全防线。


结语

三种方式,本质上是在方便和可控之间取舍:

  • 系统脚本最省事,但要打开一个有风险的开关;
  • MCP 最灵活,适合探索和一次性操作;
  • 直接调接口最快最稳,但要处理好凭证。

我现在最常用的组合是:用 MCP 摸清楚平台接口,再写成调接口的脚本,沉淀成 Skill。 不管用哪种方式,都要记住一件事:AI 在你的浏览器里做的每一件事,都会算在你头上。


系列结束语

《老登让 AI 接管日常工作》系列到这一篇就结束了。回头看这六篇,AI 真正接管的是体力活:写方案初稿、跑对账、修环境、读代码、写代码、点页面。而有几件事,从头到尾都没有交出去:定边界、做取舍、核对结果,以及为最后的决定负责。

六篇的完整目录:

  1. AI 半小时写完 9 章重构方案?真正值钱的是后面那几次追问
  2. 8.5 万个模型分三方对账:一个 Agent Skill 是怎么从跑不完改到 20 分钟的
  3. 服务器一升级,24 个流量复制任务全挂:AI 15 分钟查清根因,之后一句话修好
  4. 接手两个陌生的老系统:AI 4 分钟写完架构文档,我花了 25 天才真正看懂
  5. 一个跨两个服务的小需求:AI 写代码只用了 6 分钟,剩下一天半花在了哪
  6. AI 是怎么操作你的浏览器的?(本篇)

系列的起点是这篇总览:干了十几年 Java 的老登,我都让 AI 接管了哪些日常工作?