跳到正文
返回

ego 解放双手:让 AI 代理真正去用浏览器,而不是让你去迁就它

最近我把博客里好几个「本来要我自己点」的活,都丢给了 AI 代理自动跑——登录后台、抓数据、填表、截图、跨站点复制粘贴。我反复被一件事教育:

AI 能不能干活,不取决于模型多强,而取决于它能不能稳定地「动浏览器」。

模型再聪明,只要浏览器这一关过不去,它就只能给你出方案,然后还是得你自己点鼠标。直到我认真用了一段时间 ego-browser,这条死循环才算真正断掉。

今天这篇,我想把 ego-browser 当作「让 AI 解放双手」的工具来介绍,而不是又一篇「AI 写代码真爽」的宏大叙事。

ego-browser 到底是什么

一句话:ego-browser 是一个给 AI 代理用的 Chromium 外壳

它在普通 Chrome 的基础上多做了三件事:

能力普通浏览器ego-browser
跑在本地,登录态可继承
多个互相隔离的任务空间(各自一套标签页)❌(要靠 profile 或多开浏览器)
对外暴露完整 CDP + Node.js 助手脚本❌(要自己起 puppeteer)
任务中途能把浏览器交回给你操作✅(handOff / takeOver)

它的核心心智模型有三个:任务空间(task-space)、登录态继承、工具函数加载

这三件事,决定了 AI 代理能不能「真的在用浏览器」,而不是在跑一个临时开起来、用完就关的隐身窗口。

为什么普通浏览器对 AI 不够友好

在讲 ego-browser 怎么好用之前,先看「普通浏览器 + puppeteer/playwright」为什么不够用。

我用 puppeteer 写过不少爬虫脚本,通常的姿势是:

const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
await page.goto('https://example.com')

这条路能跑,但踩雷极多:

  1. 登录态是空的。你要么把 cookie 导出来再塞进去(格式经常对不上、还会过期),要么手动登录一次把 storageState 存下来再用——而很多网站反爬很严,headless: false 反而更难,因为它们认为 headless 才是机器人、headful 才是真人。
  2. 任务之间互相打架。代理 A 开着某后台,代理 B 也想开,共用同一个 Chrome 实例就开始抢标签页、抢 devtools 端口、抢代理设置。
  3. 异常处理太粗糙。脚本里一个 click 没命中,你要么 catch 重试,要么整条链路中断——但浏览器其实还好好的,标签页也还在。
  4. 没有「人介入」机制。遇到验证码、扫码登录、风控弹窗,脚本只能干瞪眼,要么停在那里,要么笨重地重启。

ego-browser 干的就是把这四件事系统性地解决掉。

任务空间:一个浏览器,多个互不干扰的工作台

这是 ego-browser 最值钱的设计。

const task = await useOrCreateTaskSpace('inspect example page')

一个任务空间对应一组互不干扰的标签页 + 一个独立的 browsing context,但默认继承当前用户的登录态

这意味着:

我在用的时候最常见的姿势就是:

ego-browser nodejs <<'EOF'
const task = await useOrCreateTaskSpace('抓取本月 CSDN 阅读数据')
await openOrReuseTab('https://blog.csdn.net/xxx', { wait: true })
cliLog(await snapshotText())
EOF

useOrCreateTaskSpace 不是「开一个新浏览器」,而是「给我找个不打架的工作台」。同名任务空间可以跨多次 heredoc 复用,这才是真正能撑住长流程的能力。

登录态继承:不用导 cookie,也不用 selenium 那一套

传统自动化最恶心的一步永远是登录。

微信公众号后台、知乎创作者中心、各种 SaaS——它们要么有扫码、要么有手机验证码、要么干脆风控封杀 headless。puppeteer 时代最常见的 workaround 是「人工登录一次,导出 storageState,后续脚本加载」。这条路能走通,但每次 cookie 过期都要重做一次。

ego-browser 的做法是直接基于你正在用的 Chrome,而不是拉起一个隔离实例。换句话说:

这带来的副作用是:agent 的动作不会污染你的标签页——它开的是任务空间里的标签页,不是你的;反过来,你随便关你那边的标签页,也不会让 agent 那边的脚本崩。

我第一次跑通「让 agent 自己进 CSDN 后台抓数据」的时候,真的是会心一笑。

工具函数:不是 puppeteer,更接近「操作手册」

普通 puppeteer 写起来是这样的:

const el = await page.$('button.submit')
await el.click()
await page.waitForSelector('.toast')
const text = await page.$eval('.toast', el => el.innerText)

ego-browser 给你的是更接近「人话」的一层:

await click('@21', { label: '点击提交按钮' })
const text = await js(`document.querySelector('.toast').innerText`)

注意几个细节:

我在用 ego-browser 之前,自动化脚本最痛的一步是「定位元素」——选择器天天失效、xpath 太脆、role 在不同页面又不一致。snapshotText() 返回的可访问性树把这步变成可观察、可调试的——agent 不再需要「猜选择器」,而是基于「这个按钮是干啥的」去点击。

几种真实工作流

下面这些活是我这半个月里真丢给 ego-browser + 代理跑的,顺手记一下用得对路的姿势。

1. 抓后台数据

公众号后台、CSDN、知乎、掘金——各家后台都有反爬,但 agent 借你的 Chrome 跑就没事。

const task = await useOrCreateTaskSpace('公众号后台周报数据')
await openOrReuseTab('https://mp.weixin.qq.com/', { wait: true })
// 静观:登录态已经在
await waitForElement('text=昨日阅读数', { timeout: 10 })
cliLog(await snapshotText({ scope: 'only_within_viewport' }))

2. 填表单 / 提交申请

很多内部 OA、报销系统、表单填写,字段多但逻辑简单,这是 agent 最擅长的领域。

await fillInput('@email', '[email protected]')
await fillInput('@subject', '本月工具采购报销')
await uploadFile('input[type=file]', '/abs/path/to/invoice.pdf')
await click('@submit')

3. 跨站点搬运数据

「把 A 站的数据填到 B 站」这种无聊活,自己点三十个表单字段要半小时,agent 跑两分钟。

4. 录屏 + 排错

agent 卡住的时候,captureScreenshot() + @N 引用 + 标签文本一组合,基本能定位 90% 的卡点——这比 puppeteer 时代翻 trace 强太多。

5. 中途交还给我

这是最体现「设计感」的一处:

await handOffTaskSpace([task.id])   // 浏览器还给你
// 你自己点几下、扫个码、过人机验证
// 完成后告诉我「继续」

我让它跑某个需要扫码的内部系统时,这套机制直接救命——agent 不会傻等着,而是把控制权干净地交回给你。

它不是万能的

ego-browser 不是银弹。说几个它处理不好的场景:

我的取舍

如果让我给「要不要上 ego-browser」定一条线,我现在大概这么分:

场景推荐
让 AI 代理在「我已经登录过的网站」里点东西✅ ego-browser
跑一次性、定时的小数据抓取✅ ego-browser / Puppeteer 都行
写一个长期运行的工业爬虫❌ 拿 Playwright Cluster
做端到端 UI 测试✅ Playwright 仍更稳
需要扫码、过人机验证✅ ego-browser(交还控制权机制)
想给博客文章自动配封面图、配正文图✅ ego-browser 抓 Doubao/Kling 输出

最后一条听起来离谱,但「agent 调 Doubao 生成图 → 自动抓到文章目录 → 自动 commit」这条链路,我现在是真的在跑。

写在最后

我越来越确信:AI 能不能替代人干活,不是看模型能写多复杂的代码,而是看它能不能在「真实世界」里动手

写代码是 AI 最早拿下的工作,因为代码本身是结构化的、有 git、有 test,改坏了立刻有反馈。但「在浏览器里点鼠标」这种看似更简单的活,因为之前没有合适的工具,反而是最后被攻克的。

ego-browser 这种东西,本质上是把「人 - 浏览器 - AI 代理」这条链路上所有原本别扭的环节都重新接了一遍。它不是新的浏览器引擎,也不是新的 AI 模型,它只是把「AI 怎么用浏览器」这件事,从一个每次都要自己拼的脚本工作,变成了一个有清晰心智模型的工具。

对 AI 代理来说,能动手,才有自由。而「能动手」这件事,ego-browser 这一年做得最像样。


分享这篇文章:

上一篇
业务覆盖全球,数据库里的时间到底该怎么存