从任务到完成,更快
Puppeteer 自己的 issue tracker 里全是 waitForSelector 超时的报告,哪怕元素明明就在 DOM 里也照样超时,你可能要花一整个下午去证明这是个时序问题,不是你代码写错了。
ego (lite) 跳过了这种等待再轮询的折腾:页面一加载完成,你的 Agent 就把它读成一份压缩的 Snapshot 并立即操作,每一轮把好几个步骤打包进一次 JavaScript 调用。累计下来,整个任务完成的速度比 Puppeteer 快 3 到 4 倍。
Puppeteer 是一个用于编写无头 Chrome 脚本的 Node.js 库:你自己写导航代码,调整选择器,目标网站一改版就得去补脚本。
ego (lite) 完全跳过了写脚本这一步。你的 Agent 直接读取你已登录的 Chrome,并自己写 JavaScript,完成整个任务的速度比 Puppeteer 快 3 到 4 倍。
对于一次性的抓取、填表、测试和后台杂活,脚本一直是最费时的部分:先写出来,然后页面一变就得跟着改。ego (lite) 通过开源的 ego-browser shell,把这些工作交给你已经在用的 Agent(Claude Code、Codex 或 Cursor)来完成。
Puppeteer 自己的 issue tracker 里全是 waitForSelector 超时的报告,哪怕元素明明就在 DOM 里也照样超时,你可能要花一整个下午去证明这是个时序问题,不是你代码写错了。
ego (lite) 跳过了这种等待再轮询的折腾:页面一加载完成,你的 Agent 就把它读成一份压缩的 Snapshot 并立即操作,每一轮把好几个步骤打包进一次 JavaScript 调用。累计下来,整个任务完成的速度比 Puppeteer 快 3 到 4 倍。
Puppeteer 开发者一旦不满足于单个脚本,就会发现所谓的并行,意味着要自己搭一套池:启动参数、浏览器上下文,还要靠 puppeteer-cluster 这样的队列库来限制并发,免得 Chrome 把内存吃光。
在 ego (lite) 里,你完全不需要计算池的大小。每个任务都拥有自己的 Space,都在同一个浏览器里,你想开多少个就开多少个,每个都用各自导入的 Chrome profile。它们互不干扰你正在用的标签页,你随时可以查看或接管任意一个 Space。
原生的 Puppeteer 脚本不消耗 Token,因为它根本不调用模型。成本是在你通过 MCP 服务器(比如原始的 Puppeteer MCP 参考实现)把 Puppeteer 包装给 Agent 使用时才出现的:每个被包装的操作都变成一次独立的工具调用,要把上下文重新发给模型,而且因为没有可访问性 Snapshot 工具,它只能靠截图来检查自己做得对不对。
ego (lite) 的 Agent 每一轮都把好几个操作打包进几行 JavaScript,再叠加 Snapshot 输入,同样的任务整体消耗的 Token 要少得多,按任务计算是如此。
Puppeteer 启动的是一个干干净净的空白 Chrome,没有 cookie 也没有会话,所以任何需要登录才能访问的内容,都得自己写认证流程的脚本,还要祈祷网站不会对着一个它不认识的浏览器扔出验证码或 2FA 提示。这道空白 profile 的墙,是脚本在开发环境跑得通、到真实网站上就失败的最常见原因。
ego (lite) 基于 Chromium 构建,一键就能导入你完整的 Chrome 环境。你的 Agent 继承你的登录状态、Cookie 和扩展程序,不会卡在任何地方。

| 功能 | ego lite | Puppeteer |
|---|---|---|
| 任务是怎么完成的 | 描述任务,Agent 来操作浏览器 | 编写并维护 Node.js 脚本 |
| 应对页面变化 | Agent 重新读取 Snapshot 并自动调整 | 选择器失效,你去补脚本 |
| 已登录的网站(SSO、2FA) | 继承你真实的 Chrome 配置文件和会话状态 | 空白 profile,得自己写登录脚本、导出 Cookie |
| 设置 | 安装应用,在你的 Agent 中运行 /ego-browser | Node 项目、npm install、启动配置 |
| 并行任务 | Space 在同一浏览器内隔离任务,无需计算池大小 | 自己管理浏览器池、上下文和内存 |
| AI Agent 支持 | 专为它们打造:通过 ego-browser 支持 Claude Code、Codex、Cursor | 原生不支持,需要 MCP 包装层或自定义胶水代码 |
| 日常使用的浏览器 | 支持:人和 Agent 共用一个浏览器,各自有独立的 Space | 不支持,是无头自动化工具 |
| 最适合 CI 测试套件 | 不适合:这是交互式的 Agent 任务,不是提交入库的测试代码 | 适合:结果确定、可编写脚本,对 CI 友好 |
| 可复用技能(即将上线) | 将成功的运行过程提炼为可复用技能;Agent 重复执行复杂任务时最高可快 5 倍(限量测试中) | 没有内置的同类功能 |
| 价格 | 免费,无需订阅 | 免费,开源 |
你不需要把 Puppeteer 脚本迁移到 ego (lite),而是直接不再写它们。把你曾经写脚本处理的任务,或者干脆放弃去写的任务,都交给你的 Agent。
下载 ego (lite),导入你的 Chrome profile。那些脚本一直过不去的登录,也会一起带过来。
粘贴到你的 Agent 里
/ego-browser 打开 ego.app,检查页面有没有控制台报错
在 Claude Code、Codex 或 Cursor 中运行 /ego-browser。

挑一个你平时会写脚本处理的任务,比如抓取列表页或填写后台表单,用一句话把它描述给 Agent。
在脚本真正占优势的场景继续用 Puppeteer:结果确定的 CI 套件、大批量的定时任务。ego (lite) 则负责那些交互式、每周都在变化的浏览器工作。
免费使用,运行在你的 Mac 上,一键导入 Chrome 浏览器配置文件。支持 Claude Code、Codex、Cursor,以及任何能写代码的 CLI Agent。
还在权衡选哪个?看看 Puppeteer 和同类其他工具的对比。
Puppeteer 是 Chrome 团队推出的 Node.js 自动化库,通过 DevTools Protocol 和 WebDriver BiDi 控制 Chrome 和 Firefox。它成熟、速度快、免费,是开发者编写仅限 Chrome 的抓取脚本、生成 PDF 和无头测试的常见选择,尽管 Playwright 在测试框架整体采用率上已经领先。它自己的 issue tracker 里记录了不少 waitForSelector 在导航和重连时出现的真实抖动问题,规模化运行的团队最终要手动管理浏览器池、上下文和内存,但对于精心调试、提交入库、跑在 CI 里的自动化代码,Puppeteer 依然出色。下面的对比讨论的是:当浏览这件事由 AI Agent 而不是脚本来做时会发生什么。
对于由 AI Agent 驱动的浏览器工作来说,是的:它完全去掉了脚本这一层,直接在你真实的、已登录的 Chrome 里运行任务,是少数几个专为 Agent 而不是为了写更多脚本而设计的 Puppeteer 替代方案。而对于提交入库、结果确定的 CI 自动化代码,Puppeteer 依然是更好的选择。不少开发者两个都在用:Puppeteer 跑流水线,ego (lite) 处理那些他们一直没抽出时间写脚本的事。
这三个都是以脚本为核心的自动化库,playwright vs puppeteer 或者 puppeteer vs selenium 该选哪个,通常取决于你测的是什么、用什么语言。如果你在 Node 里只做 Chrome,想要一个精简的 DevTools 级 API,Puppeteer 更合适。对于新建的测试套件,Playwright 通常更占优势:多浏览器覆盖、自动等待,以及更强的测试运行器。Selenium vs Puppeteer 则更接近,selenium 和 puppeteer 哪个更好,往往取决于语言和 CI 环境,而不是纯粹的能力差异:Selenium 的优势在于 W3C WebDriver 标准,以及最广泛的语言和老旧浏览器支持,代价是更多的样板代码。ego (lite) 完全不参与这场争论,因为它是一款 agent browser:浏览这件事由 AI Agent 来做,而不是靠这三者中的任何一个去写脚本。这两个方向的对比详情,可参见我们的 ego (lite) vs Playwright 和 ego (lite) vs Selenium 页面。
围绕 Puppeteer 搭建的 MCP 包装层能让 Agent 获得浏览器访问能力,但每个操作都是一次独立的工具往返,要经过模型,而且底层浏览器依然是空白 profile。ego (lite) 用 JavaScript 打包操作,并继承你真实的登录态,所以按任务计算的 Token 成本一直很低,Agent 也永远不会撞上那种包装层过不去的 SSO 高墙。
选择器绑定的是页面精确的标记结构:类名、DOM 顺序、ARIA 结构。目标网站的一次改版、一次 A/B 测试,或者一次框架升级,都会改变这些标记,你的 waitForSelector 调用就会开始超时,还往往是断断续续地出现,这正是 Puppeteer 自己的 issue tracker 里反复被报告的那种抖动问题。ego (lite) 的 Agent 根本不依赖固定的选择器。它每次都把当前页面读成一份 Snapshot,再根据实际看到的内容去推理,所以改版对它来说只是下一次运行需要适应的变化,而不是会让脚本崩掉的东西。
不需要。把 Puppeteer 从单个脚本扩展开来,通常意味着要搭一套池(puppeteer-cluster、generic-pool,或者自己写队列)来限制并发,避免 Chrome 的内存占用失控。ego (lite) 的 Space 都运行在你已经打开的同一个浏览器进程里,所以同时跑五个任务,不代表要照看五个浏览器实例。
可以。任何会写代码的 CLI Agent 都能通过 MIT 许可的 ego-browser shell 接入:Claude Code、Codex、Cursor、Gemini CLI、OpenCode,以及你自己搭建的内部 Agent。
是的。免费,无需订阅,而且 ego-browser shell 是开源的。