Ego 浏览器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/ego-browser-wb7k2-oc4u。
技能介绍
要解决什么问题
浏览器自动化脚本最怕两件事:环境不一致和「看不见的手」打架。Agent 在同一个浏览器里跑任务时,常常会踩到这些坑:
- 多个任务共享同一个上下文,Cookie 和登录态互相污染;
- 用户正在手动操作页面,Agent 却不知道,直接覆盖了对方的动作;
- 想用语义定位,但有些界面(画布、电子表格、地图)根本没有可访问性树;
- 脚本结束后留下一堆标签页,或者把别人的标签页关掉了。
ego-browser 的做法是给每个任务一个隔离的浏览上下文(task space),同时把控制权交给人和 Agent 显式协商。
核心能力与关键步骤
每个 task space 拥有独立的标签页,但会继承用户当前的登录态,所以 Agent 不需要重新登录就能操作已登录站点。任务开始时通过 taskSpaces.useOrCreate(nameOrId) 选择或创建空间,之后所有操作都在同一个 Bash 调用里完成。
交互路径有三条,可以根据页面类型组合使用:
- 语义路径:
page.snapshot()拿到可交互元素的快照,再用语义定位符、@N引用或稳定的loc=...值操作。适合普通 DOM 页面。 - 视觉路径:截图 + 鼠标键盘。适合画布、虚拟化编辑器、电子表格和地图这类缺少 AX 树的界面。编辑前先做一个小的写入探测,截图或回读验证后再继续。
- 直接路径:
locator.evaluateAll(fn, arg)和page.evaluate(fn, arg)读取页面状态。只有 facade 覆盖不了的能力才用裸 CDP。
任务结束时必须调用 taskSpaces.complete(nameOrId, { keep }),keep 是必填项。默认 false,关闭空间;只有在用户明确要求保留页面、需要人工介入,或结果无法以 URL/文件/摘要形式交付时才设为 true。
适用边界与注意点
- 所有权是硬约束。
taskSpaces.switch只能切换 agent 拥有的空间;对 user-owned 空间必须先claim。如果遇到「用户正在控制」的错误,整条任务立即停止,不要自动重试或绕过,而是询问用户。 - 快照引用有生命周期。
@N引用只在当前 Bash 调用内有效,每次快照都会重建引用表。命令结束后重新快照,或改用语义定位符。 - 不要依赖固定 sleep。导航、筛选、排序、提交等操作要用页面事件等待,
page.waitForTimeout(...)控制在 2000 ms 以内,只用于短暂的视觉稳定。 - 弹窗和零尺寸视口。
page.info()返回{ dialog: ... }时,需要用cdp('Page.handleJavaScriptDialog', ...)处理;w: 0或h: 0时停止截图和坐标操作。 - 超时单位不一致。Playwright 风格的 page、locator、导航辅助函数使用毫秒;
fetch.server/fetch.browser和taskSpaces.waitForAgentControl使用秒。 - 不要硬编码标签页 ID,需要切换或关闭时重新调用
browser.listTabs()验证。
使用场景
- 运维人员需要同时管理多个隔离的浏览器环境,避免标签页混淆并保留登录态。
- 数据分析师在处理需要登录的网站时,利用继承的登录态收集数据且不干扰用户操作。
- 测试工程师模拟复杂用户操作,如表单填写和提交,验证页面跳转和弹窗处理。
- 设计师在画布或电子表格中进行视觉交互测试,如截图和鼠标操作。
适合人员
- 后端开发者:希望自动化测试浏览器交互,但不想处理环境差异。
- 运维人员:需要管理多个隔离的浏览器实例,确保任务间互不干扰。
- 数据分析师:需要从需要登录的网站抓取数据,希望脚本自动处理登录态。
- 测试工程师:希望模拟用户操作,验证复杂表单提交和页面跳转的正确性。