ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ego-browser 实战指南:用 ego-lite 的 CLI Node.js 运行时驱动真实浏览器完成 AI Agent 网页自动化

ego-browser 实战指南:用 ego-lite 的 CLI Node.js 运行时驱动真实浏览器完成 AI Agent 网页自动化 ego-browser 实战指南用 ego-lite 的 CLI Node.js 运行时驱动真实浏览器完成 AI Agent 网页自动化【免费下载链接】ego-liteThe fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without disturbing you. Zero cost, zero config.项目地址: https://gitcode.com/GitHub_Trending/eg/ego-liteego-browser 是 ego-lite 项目为 AI Agent 提供的 Chromium 浏览器自动化能力入口。Agent 通过ego-browser nodejs命令在 heredoc 中直接编写并执行 Node.js 脚本借助预加载的snapshotText、click、js、cdp等 helper 观察页面、操作 UI、求值浏览器端 JavaScript并复用用户已登录的浏览器状态完成登录、表单填写、数据抓取、Web 应用测试等任务。读完本文你将掌握 ego-browser 的完整 helper 体系、任务空间Task Space所有权与交接协议、三种工作流的选择策略以及全部关键注意事项可直接上手编写自己的浏览器自动化脚本。一、ego-browser 是什么给 Agent 的浏览器运行时ego-browserego-lite是一款从底层设计上同时友好于人类用户与 AI Agent 的 Chromium 浏览器。AI Agent 工作在独立的隔离空间中默认继承用户当前的登录状态无需与用户争抢浏览器窗口也不会打扰用户的正常浏览。从架构上看Agent 拿到的是一套 CLI 可访问的 Node.js 运行时ego-browser (Chromium) - globalThis.ego - Playwright 风格 helper 门面 - Agent heredoc浏览器侧暴露ego运行时tabs、CDP、snapshot、task spaces见 package/ego-browser/src/browser-runtime.tsAgent 侧由 package/ego-browser 包打包出单文件 ESM 产物dist/out/index.js其中预置了 Playwright 风格的page、page.locator、browser、taskSpaces、site、fetch、cdp等门面见 package/ego-browser/src/helpers.tsCLI 入口 package/ego-browser/src/run.ts 从 stdin 读取脚本、注入 helper 上下文并执行。所有浏览器操作都应通过Bash工具以 heredoc 形式运行不要先把代码写成.js文件再执行。环境要求ego-browser 依赖 ego-lite 桌面应用提供ego-browser命令。安装、连接问题请查阅 skills/ego-browser/references/install.md下文第五节有要点梳理。假设用户明确要求使用 ego-browser 时应默认ego-browser与仓库运行时均已就绪不要预先执行which ego-browser、node -v、包元数据或 help 输出等检查只有当首次运行报错时才需要排查环境问题。二、快速开始第一个 heredoc 脚本ego-browser nodejs EOF // 为整个用户任务命名任务空间并在后续多轮 heredoc 中复用同一个空间 const task await useOrCreateTaskSpace(inspect example page) cliLog(task space id: task.id) await openOrReuseTab(https://example.com, { wait: true, timeout: 20 }) cliLog(await snapshotText()) EOFheredoc 的正文作为一个 Node.js 脚本运行它控制所选定的 ego-browser 任务空间。所有 ego-browser helper 都已预加载进该脚本无需 import。从源码看package/ego-browser/src/run.ts 会把 heredoc 内容构造成一个AsyncFunction执行并将helperContext()返回的上下文含全部门面绑定到globalThis同时console.log被重定向到输出缓冲在脚本结束后统一 flush这保证了多轮 heredoc 之间的输出一致。三、Common helpers常用 helper 全景类别Helper任务空间listTaskSpaces、useOrCreateTaskSpace、claimTaskSpace、handOffTaskSpace、takeOverTaskSpace、waitForAgentControl、completeTaskSpace导航 / 状态listTabs、openOrReuseTab、closeTab、gotoAndWait、currentTab、switchTab、gotoUrl、pageInfo、ensureRealTab观察snapshotText、captureScreenshot、drainEvents滚动 / 鼠标scrollBy、scrollToBottomUntil、scroll、click、doubleClick、hover、dragMouse键盘 / 输入typeText、fillInput、pressKey、dispatchKey文件uploadFile等待wait、waitForLoad、waitForElement、waitForNetworkIdle抓取serverFetch、browserFetchCDP / 求值js、cdp输出cliLog、help关键 helper 语义cliLog(value)—— 打印到终端这是 heredoc 内唯一的输出机制所有最终结果都必须经由它输出。对应源码中run.ts对console.log的输出缓冲与 flush 机制。await pageInfo()—— 正常情况下解析为{ url, title, w, h, sx, sy, pw, ph }分别对应 URL、标题、视口宽高、滚动偏移、页面总宽高见 package/ego-browser/src/driver/nav.ts如果打开了原生浏览器对话框则解析为{ dialog: ... }此时页面 JavaScript 被阻塞。若pageInfo()解析为{ dialog: ... }需先用await cdp(Page.handleJavaScriptDialog, { accept: true })或accept: false处理对话框之后才能继续运行页面 JavaScript。await ensureRealTab()—— 需要时切换到某个已存在的非内部页面标签并解析为它没有时解析为null。它不会创建标签页——创建请用await openOrReuseTab(...)。内部 URL 前缀chrome://、chrome-untrusted://、devtools://、chrome-extension://、about:会被过滤见 package/ego-browser/src/driver/nav.ts。await closeTab(target?)—— 关闭指定 target id / 标签对象省略参数时关闭当前标签。await drainEvents()—— 消费并返回页面产生的异步事件队列导航事件、网络事件等见 package/ego-browser/src/driver/observe.ts。await serverFetch(url, options)—— 从 Node 侧发起请求并返回响应体await browserFetch(url, options)—— 从当前浏览器页面上下文发起请求并返回响应体底层实现见 package/ego-browser/src/http.ts。help(name)—— 打印某个 helper 的用法说明例如cliLog(help(click))。help()无参时输出全部门面page/locator/browser/taskSpaces/site/fetch的帮助文本见 package/ego-browser/src/helpers.ts。四、Task spaces隔离浏览上下文与所有权协议任务空间Task Space是 ego-browser 为 AI Agent 提供的隔离浏览上下文。每个任务空间拥有自己的一组标签页但默认继承用户当前的登录状态因此 Agent 可以在已认证站点上操作而不与用户正常浏览器窗口竞争或互相干扰。关闭一个任务空间里的所有标签页等价于关闭该任务空间。多轮 heredoc 的复用规则一个任务通常需要多轮 heredoc 才能完成。由于 Node.js 运行时在每轮 heredoc 结束后退出、不保留任何状态常规工作 heredoc 应以显式调用useOrCreateTaskSpace(nameOrId)开头来复用同一空间从而跨轮连续操作、复用标签页。nameOrId可以是任务空间名称、数字 id 或纯数字字符串 id字符串先匹配name/taskId纯数字字符串再回退匹配数字 id数字只匹配已存在的数字 id若无匹配useOrCreateTaskSpace失败而不是新建空间。这与源码 package/ego-browser/src/helpers.ts 中findMatchingTaskSpace的匹配逻辑完全一致。源码注释还指出useOrCreateTaskSpace遇到 user-owned 空间时不会 claim而是原样选中让EGO_TASK_SPACE_USER_IN_CONTROL错误浮出再由 Agent 调用claimTaskSpace(nameOrId)取得所有权见 helpers.ts L193-L215。命名建议创建新任务空间时用简短名称描述当前用户目标例如search github issues不要使用字面占位符。后续的追问、纠正、细化、复查、结果验证即使你之前以为任务已完成也应持续复用该任务空间。只有当用户明确开始一个无关的新目标时才新建空间。跨轮恢复已知任务时优先使用useOrCreateTaskSpace返回的数字id例如task.id以避免名称冲突。从既有空间继续工作经用户明确确认后要从一个既有的、用户拥有的 / 不活跃的 / 未分配的任务空间继续工作await listTaskSpaces()找到该空间await claimTaskSpace(id)取得所有权并选中它await listTabs()await switchTab(targetId)选中精确的标签页然后开始操作。所有权策略Ownership Policy每个任务空间都有ownership: agent | agentDelegatedToUser | userhelper 对 user-owned 空间有特殊行为Helper目标空间为 user-owned 时的行为switchTaskSpace抛出异常——仅限 agent-owned 空间claimTaskSpace执行 claim所有权转移给 agent然后选中它handOffTaskSpace跳过——解析为{ done: false, skipped: user-owned }completeTaskSpace(…, { keep: true })跳过——解析为{ done: false, skipped: user-owned }completeTaskSpace(…, { keep: false })先 claim 它然后关闭takeOverTaskSpace/waitForAgentControl不做所有权检查以上表格在源码 package/ego-browser/src/helpers.ts 的注释中有完全一致的对照表并注明用户控制边界在原生桥接层执行真实命令时强制生效。handOffTaskSpace与completeTaskSpace在实际发生时解析为{ done: true }。在向用户报告 handoff/清理完成之前务必检查done字段——出现skipped通常意味着你目标化了一个从来不属于你的空间。completeTaskSpace 的专用收尾约定completeTaskSpace(nameOrId, { keep })必须独占一个专门的最终 heredoc并且只能在前一个 heredoc 的输出确认任务真正完成后运行。keep参数必填默认策略为false任务完成后关闭任务空间除非有具体理由让页面保持可见。仅在以下情况使用{ keep: true }用户明确要求保持页面打开任务需要在那个精确页面进行人工操作或者结果无法以 URL、文件、artifact、摘要等良好形式交付。不要仅仅因为访问过某个页面、创建过某个文档、或截图用于验证就保留任务空间。若任务结束后需要保留任务空间只保留需要展示给用户的标签页。随手清理一次性标签页搜索结果页、交叉核对页等而不是攒到最后以{ keep: true }收尾时清掉剩余的临时标签页只留下值得展示的页面。用await closeTab(targetId)关闭单个标签targetId来自listTabs()或openOrReuseTab的返回值。对打开标签数量保持宽松感知——(await listTabs()).length一下即可不必专门花一轮去数。五、环境安装与连接问题处理ego-browser命令由 ego lite 应用提供。首次遇到command not found/ 环境缺失最可能是 ego lite 尚未安装或用户明确要求安装时先阅读 skills/ego-browser/references/install.md 并按流程完成安装再回到原任务——不要放弃也不要反复重试同一段 heredoc。安装脚本位于 skills/ego-browser/scripts/install.sh仅支持 macOS按 CPU 架构arm64 / x64下载 ego lite 安装器DMG安装ego lite.app到/Applications必要时回退到~/Applications剥离 quarantine 属性避免 Gatekeeper 阻止首次启动完成后直接启动ego lite应用。sh skills/ego-browser/scripts/install.sh脚本打开 ego lite 后用户需在 GUI 中完成首次启动引导onboarding按需选择从 Chrome 或其他浏览器导入数据引导过程会把ego-browser命令注册到 PATH通常在~/.local/bin。onboarding 是用户在 GUI 中完成的步骤脚本打开 ego lite 后请等待用户确认已完成引导再继续。完成后确认命令可用command -v ego-browser若提示找不到通常是~/.local/bin不在当前 PATH临时修复后重试export PATH$HOME/.local/bin:$PATH command -v ego-browser再用一个最小 heredoc 验证运行时输出ego-browser ready即环境就绪ego-browser nodejs EOF console.log(ego-browser ready) EOF排查要点非 macOS 平台需让用户从官网手动下载安装下载失败脚本会自动重试 3 次仍失败通常是网络问题Gatekeeper 仍拦截时让用户到「系统设置 → 隐私与安全性」手动允许引导后命令仍不可用时确认~/.local/bin在 PATH 上或让用户重开 ego lite 完成引导后重试。六、Scroll / Mouse滚动与鼠标目标格式// DOM 滚动 await scrollBy(900) await scrollToBottomUntil( async () await js(String.rawdocument.querySelectorAll(article).length) 20, { step: 900, wait: 1, maxSteps: 20 } ) // 真实滚轮事件 await scroll({ dy: 900 })元素级 helperclick、doubleClick、hover、dragMouse、fillInput、uploadFile、waitForElement接受同一套 selector/ref 表面原始 CSS、xpath...、N/refN以及snapshotText()输出的loc...值loccss:...、locrole:...、lochref:...。Nref 仅供 ego-browser helper 使用不是document.querySelector(...)内部合法的选择器。click、doubleClick、hover、dragMouse共享以下目标格式坐标为 CSS 像素格式含义stringCSS 选择器、xpath...、N/refN或loc...点击元素中心[x, y]或{x, y}视口坐标{selector}CSS 选择器、xpath...、N/refN或loc...点击元素中心{selector, x, y}从元素左上角按x/y偏移options.label可选3~6 个词的动作描述触发视觉高亮动画示例await click(21, { label: check login status }) await click(button.primary, { label: click submit button }) await click([420, 260]) await click({ x: 420, y: 260 }) await click({ selector: canvas#stage, x: 12, y: 8 }) await hover(5, { label: hover to reveal menu }) await dragMouse([from, to], { label: drag card })从源码看坐标型目标的解析在 package/ego-browser/src/driver/pointer.ts字符串/selector 目标会先waitForSelector(..., { state: visible })、scrollIntoViewIfNeeded再解析元素中心坐标坐标点直接使用。click会按mouseMoved → mousePressed → mouseReleased顺序派发真实 CDP 输入事件并通过页面侧 input probe 验证点击是否真正命中命中失败时自动回退为合成事件见 pointer.ts L63-L95 与 L224-L301drag要求至少两个目标点pointer.ts L138-L190。滚轮wheel默认向下滚动 300 CSS 像素页面可见且聚焦时走 CDPInput.dispatchMouseEvent后台/未聚焦标签则派发合成 WheelEvent 并window.scrollBypointer.ts L481-L551。七、uploadFile文件上传await uploadFile(input[typefile], /absolute/path/to/file.pdf)第一个参数是目标input[typefile]的选择器支持 CSS /N/loc等同一套目标表面第二个参数是绝对路径。底层对应 package/ego-browser/src/driver/files.ts 的setInputFiles以及 Playwright 风格的page.locator(...).setInputFiles(...)。八、js()浏览器端求值js()本质上是 CDP 的Runtime.evaluate接收一个字符串。可以传函数但会触发一次性警告且通过.toString()包裹——闭包不会被捕获也没有参数通道。不要像使用 Puppeteer / Playwright 的page.evaluate(fn, ...args)那样使用js()。需要在浏览器内执行多步逻辑时把它包进单个自调用闭包并只 return 一次不要拆成多次await js()调用const data await js(String.raw(() { const items [...document.querySelectorAll(article)] return items.map(el ({ text: el.innerText, links: [...el.querySelectorAll(a)].map(a a.href), })) })())注意事项对应 SKILL.md 与 package/ego-browser/src/cdp-eval.ts 的实现js()返回求值结果本身不是 JSON 字符串——不要用JSON.parse(...)再包一层模板字符串里的正则反斜杠必须双写如\\d、\\s或直接用String.raw传给js()的源码若包含顶层return会自动被 IIFE 包裹嵌套回调里的return也可能意外触发此行为。复杂表达式请显式写成(() { ... })()heredoc 体内的代码运行在Node.jsjs(...)内的代码运行在浏览器页面。导航、等待、cliLog(...)属于 heredoc 体document、window、页面选择器属于js(...)。九、推荐工作流三种浏览器操作范式ego-browser 有三条主要工作流。动手前先根据页面与任务选择合适的工作流。普通网站真实 DOM 控件优先用语义工作流而 canvas 类生产力应用与富编辑器——包括 Google Docs、Google Sheets、飞书/Lark Docs、Notion、Figma、白板、地图及其他虚拟化编辑器——主编辑面优先用视觉工作流。这类应用常在 DOM 中暴露工具栏、标题输入框、隐藏 textarea、离屏 iframe 或 canvas 层它们并不代表真实可编辑的文档或网格。不要对主编辑面依赖await fillInput(...)、DOM 选择器或snapshotText()ref除非一次小型写入探针证明了文本确实落在预期位置。向富编辑器写入大量内容前先做一次小型写入探针再用await captureScreenshot()、导出/读回路径或其他可靠的视觉/状态检查验证。如果探针内容出现在标题栏、工具栏搜索框、隐藏输入框或任何错误字段立即停止对该表面使用 DOM/input helper改用截图引导的鼠标动作加真实键盘操作。1. 语义工作流snapshotText() refs / locators适用于大多数含文本、链接、按钮、表单、表格、列表的普通页面复用或创建任务空间const task await useOrCreateTaskSpace(name)打开或切换页面await openOrReuseTab(url, { wait: true })仅在当前标签内导航时用await gotoAndWait(url, { timeout, settle })用await snapshotText()观察得到带[refN, loc..., url...]注释的整页语义树用await click(N)、await fillInput(N, ...)或稳定的loc...值操作当直接 DOM 逻辑比 helper 调用更简单时也可直接用在重要的点击、输入、导航之后再次用await snapshotText()、await pageInfo()或await captureScreenshot()观察再假设成功。snapshotText()默认scope: full_page整页几乎总是用默认值只有任务只需要可见内容时才传scope: only_within_viewport。底层实现在 package/ego-browser/src/driver/observe.ts它会通过browserSnapshotRefsToRefMap把每次快照的 ref 同步到 refMap见 observe.ts L61。2. 视觉工作流await captureScreenshot() 坐标 / 键盘动作适用于页面主要是视觉性的、canvas 类、重度虚拟化或无障碍/语义结构不完整时查看截图用视口坐标动作await click([x, y])、await doubleClick([x, y])、await pressKey(...)、await typeText(...)用另一张截图或可靠的导出/读回路径验证富编辑器、电子表格、视觉菜单、地图/canvas UI、拖拽交互、以及视觉明显但 DOM/AX 树贫弱的目标优先走此路径。截图底层通过 CDPPage.captureScreenshot完成默认写入临时目录的ego-browser-shot-pid-seq.png见 observe.ts L97-L138。3. 直接 DOM / CDP 工作流await js(...)/await cdp(...)适用于需要浏览器状态、紧凑数据抽取、自定义 DOM 遍历或原始浏览器能力时浏览器侧逻辑保持在一个显式 IIFE 中并只 return 一次用await cdp(...)执行 helper 未覆盖的浏览器协议操作。三种工作流可以组合使用。当下一步依赖新页面状态或用户交接时任务可能跨多轮 heredoc。每一轮写一个连贯的脚本来推进任务观察 → 操作或抽取 → 验证 → 用cliLog(...)报告。避免写微小探针脚本但也不要硬把整个任务塞进一个超大脚本。十、Caveats必须牢记的注意事项wait(...)与timeout值以秒为单位只有参数名以Ms结尾的才是毫秒。提示驱动层的原生等待原语如 package/ego-browser/src/driver/waits.ts 的waitForTimeout(ms)与goto内部默认timeout: 20000按毫秒实现这是内部细节Agent 脚本只需遵循 SKILL.md 的秒单位契约。Nrefs 只对最近一次snapshotText调用有效——每次调用都会重建 refMap。ref 数字来自 CDPbackendNodeId因此同一元素跨调用保持同一数字但要使用NN 必须出现在最新一次快照输出中。元素滚出视口、DOM 重渲染、或上一次使用scope:only_within_viewport未覆盖该元素都会导致Unknown ref。需要长期引用的元素使用快照输出的loc...值作为稳定选择器或直接写 CSS 选择器。对应 package/ego-browser/src/element-resolver.ts 中Unknown ref的 transient 错误语义。js()返回求值结果不是 JSON 字符串——不要用JSON.parse(...)包裹。js(...)模板字符串内正则反斜杠需双写或使用String.raw。js()源码含顶层return会自动 IIFE 包裹嵌套回调中的return也可能触发。复杂表达式请显式用(() { ... })()。若await pageInfo()报告w: 0或h: 0在视口修复前不要继续坐标操作或截图。尝试切换到真实标签、重载或使用 CDP 视口指标再用await pageInfo()与await captureScreenshot()验证。heredoc 体代码运行在 Node.jsjs(...)内代码运行在浏览器页面。导航、等待、cliLog(...)属于 heredoc 体document、window、页面选择器属于js(...)。任务完成时始终调用completeTaskSpace(name, { keep })不要挂起空间。默认{ keep: false }只有「任务空间」一节描述的具体实时页面场景才用{ keep: true }。用户明确要求使用 ego-browser 时默认命令与运行时已就绪不要预先检查环境首次运行报错才排查。首次运行报command not found/ 环境缺失或用户要求安装 ego lite 时先读 skills/ego-browser/references/install.md 走完安装流程再回到原任务——不要放弃也不要反复重试同一段 heredoc。十一、控制交接Agent 与用户之间的浏览器控制权任意时刻任务空间的控制权只属于一方——Agent 或用户。用户持有时Agent 的任何浏览器操作都会失败并提示 user is controlling——不要重试按下文步骤恢复。user is controlling 错误是整个任务的硬停止不是可以绕过的障碍它意味着用户故意把浏览器拿回去了通常是因为你当前的做法正在出错。尊重它就是正确结果强行推进目标才是失败。此时唯一可做的是询问用户并等待。inactive、not assigned to an agent 等类似任务空间错误同样是硬停止需要相同的确认要求仅在用户明确确认后恢复然后从await claimTaskSpace(id)开始。交接Handing off当任务需要用户干预如登录、验证码、手动确认时调用await handOffTaskSpace([nameOrId])把控制权交给用户并明确告诉用户需要做什么。省略nameOrId使用当前选中的任务空间跨 heredoc 轮次请传task.id以避免歧义。夺回控制Regaining control只有在用户明确确认之后——通过 Ask你的 harness 的按钮/选项提示如 Continue vs Finish task或聊天中的 continue 消息——才能取回控制权。然后开一轮新的 heredoc以await takeOverTaskSpace([nameOrId])开始并继续如果用户选择结束用await completeTaskSpace(nameOrId, { keep })收尾。绝不要自行调用takeOverTaskSpace去抢回控制——它不做所有权检查会从用户手中夺走浏览器。意外的接管Unexpected takeover用户随时可以通过浏览器 GUI 接管——效果等同于 Agent 调用了handOffTaskSpace。不要重试失败的操作不要自动接管弹出上面的 AskContinue / Finish仅在用户选择 Continue 时恢复。只读等待await waitForAgentControl(nameOrId)是一个只读的阻塞轮询永远不会夺取控制只在当前 heredoc 内等待你自己发起的交接完成。源码中它通过一个无害的ego.snapshot探针检测控制权默认间隔 20 秒、超时 600 秒见 package/ego-browser/src/helpers.ts。十二、深入源码helper 门面与选择器解析原理heredoc 执行链路package/ego-browser/src/run.ts 处理 CLI 参数-h | --help打印帮助--doctor检查浏览器与连接状态--reload重置浏览器连接--debug-clicks打开调试。无参数时从 stdin 读取脚本注入执行上下文后运行并在收尾时统一 flush 输出缓冲。构建与测试命令在 package/ego-browser 目录下npm ci npm run build # 打包到 dist/out/index.js npm test # build tsc --noEmit node --testPlaywright 风格门面package/ego-browser/src/helpers.ts 是 Agent 与浏览器运行时之间的唯一桥梁向脚本暴露五大门面page——goto、info、locator、getByRole/getByText/getByLabel/getByPlaceholder/getByTestId、waitForLoadState、waitForSelector、waitForURL、waitForRequest/waitForResponse、waitForEvent(download)、evaluate、screenshot、snapshot、keyboard、mouse、screencast等locator—— 严格的自动等待定位器支持first/nth/last、getBy*、filter、click/hover/dragTo、fill/press/check/selectOption、textContent/innerText、evaluate/evaluateAll等browser——listTabs、currentTab、switchTab、openOrReuseTab、closeTab、ensureRealTab、iframeTargettaskSpaces——list/switch/new/useOrCreate/claim/complete/handOff/takeOver/waitForAgentControlsite—— 站点学习能力skills、skillsForUrl、runTool、runBrowserTool、learnContext。其中站点学习site learnings来自技能工作区skills/ego-browser/learnings/site/如google、x-com目录下的 notes 与 tools默认加载兄弟技能包可用环境变量EGO_BROWSER_AGENT_WORKSPACE覆盖见 package/ego-browser/README.md。选择器 / ref 解析package/ego-browser/src/element-resolver.ts 负责把Nref、loc...、CSS、XPath 统一解析为可操作的 CDP 后端节点N先查 refMappackage/ego-browser/src/ref-map.ts、package/ego-browser/src/ref-state.ts通过DOM.getBoxModel/DOM.resolveNode取中心点或对象句柄backendNodeId 失效后回退到 role/name 查找locrole:...通过Accessibility.getFullAXTree按角色与名称匹配element-resolver.ts L424-L467并要求唯一匹配否则抛错loccss:...、xpath...、loctext:...、lochref:...、locplaceholder/alt/title/testid:...各自由对应的浏览器端表达式解析element-resolver.ts L505-L703多元素匹配会得到matched N elements的永久性错误。导航与等待openOrReuseTab(url, options)支持match: exact | origin | originpath | includes四种复用匹配模式命中则复用已有标签否则新建{ wait: true }时等待文档加载完成见 package/ego-browser/src/driver/nav.tswaitForElement对应waitForSelector支持state: visible | attachedtransient 错误未找到/未就绪会以 300ms 间隔轮询直到超时永久错误坏选择器/歧义立即抛出见 package/ego-browser/src/driver/waits.tswaitForNetworkIdle通过 CDP Network 域观察请求生命周期默认 500ms 空闲窗口判定空闲waits.ts L546-L581。键盘输入pressKey支持 Playwright 风格组合键Controla、ShiftTab修饰键为 Control、Shift、Alt、Meta、ControlOrMetamacOS 上解析为 Meta并针对selectAll、deleteBackward、deleteForward等编辑命令做原生 fallback见 package/ego-browser/src/driver/keyboard.ts。fillInput默认clearFirst: true聚焦目标、清空内容、Input.insertText写入并派发input/change事件keyboard.ts L280-L326。十三、相关文档与资源本技能文档skills/ego-browser/SKILL.md安装与排查skills/ego-browser/references/install.md、安装脚本 skills/ego-browser/scripts/install.sh运行时包说明与构建package/ego-browser/README.md核心源码CLI 入口 package/ego-browser/src/run.ts、helper 门面 package/ego-browser/src/helpers.ts、元素解析 package/ego-browser/src/element-resolver.ts、驱动层 package/ego-browser/src/driver/端到端任务空间测试package/ego-browser/src/taskspace-e2e.test.mjs、helper 测试 package/ego-browser/src/helpers.test.mjs站点学习数据skills/ego-browser/learnings/google、x-com 的 notes 与 tools【免费下载链接】ego-liteThe fastest browser for AI agents to run browser automation, built for sharing your logged-in browser state with your AI agents, like Codex or Claude Code, without disturbing you. Zero cost, zero config.项目地址: https://gitcode.com/GitHub_Trending/eg/ego-lite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表