• 简体中文
  • 浏览器 API

    aiod 连接已经启动的 Chromium,不负责启动浏览器。默认连接 127.0.0.1:9222;如果 Chromium 在其他地址,请设置 BROWSER_REMOTE_DEBUGGING_HOSTBROWSER_REMOTE_DEBUGGING_PORT

    可以使用 Playwright、Puppeteer 等 CDP 客户端,也可以直接调用 REST API。/v1/browser/*/v2/browser/* 的请求体相同;桌面操作除外:v1 使用 POST /v1/browser/actions,v2 使用 /v2/computer。详见 Computer Use

    其他已移除的 1.x 路由见 已移除的路由

    运行要求

    GET /v2/sandbox 返回 capabilities.browser

    GET /v1/capabilities 返回 browser.status

    状态何时仍然可用
    ready调试端口上 CDP 有应答全部路由
    degraded找到了浏览器可执行文件,但 CDP 不可达infonetwork/requests
    absent两者都没有infonetwork/requests

    不是 ready 时,其余工具不可用。见 Sandbox

    获取 CDP URL

    info 返回 CDP 客户端要连接的地址:

    curl "$BASE_URL/v2/browser/info"
    curl "$BASE_URL/v1/browser/info"
    {
      "data": {
        "cdp_url": "ws://127.0.0.1:18091/cdp/devtools/browser/46164812-5f92-4ec5-891a-8c138aeb93a4",
        "cdp_ui_url": null
      }
    }
    • cdp_url —— CDP 客户端要连接的 WebSocket 地址
    • cdp_ui_url —— 内置的 DevTools 页面,没有提供时为 null

    通过反向代理访问时,cdp_url 会使用对外地址。Chromium 暂时不可用时,恢复后重新调用 info

    详细配置见 CDP 接入

    需要使用 Playwright 或 Puppeteer 时,先调用 info 获取 cdp_url,再将它传给客户端。完整示例见 浏览器(CDP)

    REST 接口

    不需要完整 CDP 客户端的操作,aiod 提供一套精简 REST。除注明外均为 POST,返回结构都是标准的 {success, message, data}。完整的请求/响应结构见 API 参考

    这些工具挂在 /v2/browser 下:

    这些工具挂在 /v1/browser 下:

    navigateevaluatesnapshotclickfilluploadcdp 都可以通过 tab_id 指定标签页。

    不传 tab_id 时,操作默认作用于列表中的第一个标签页。新打开的标签页,无论由 tabs 还是页面自身打开,都会排在最前面。

    screenshot 不支持 tab_id,始终截取列表中的第一个标签页。见 标签页

    导航与脚本执行

    curl -X POST "$BASE_URL/v2/browser/navigate" \
      -H "Content-Type: application/json" \
      -d '{"url": "https://example.com", "wait_until": "load"}'
    
    curl -X POST "$BASE_URL/v2/browser/evaluate" \
      -H "Content-Type: application/json" \
      -d '{"expression": "document.title"}'
    curl -X POST "$BASE_URL/v1/browser/navigate" \
      -H "Content-Type: application/json" \
      -d '{"url": "https://example.com", "wait_until": "load"}'
    
    curl -X POST "$BASE_URL/v1/browser/evaluate" \
      -H "Content-Type: application/json" \
      -d '{"expression": "document.title"}'

    1.x SDK 没有对应这两个路由的方法,请直接调用它们。

    请求体示例(v1 和 v2 相同):

    navigate

    {
      "url": "https://example.com",
      "wait_until": "load"
    }

    evaluate

    {
      "expression": "document.title"
    }
    路由作用说明
    POST navigate加载 URL,或在历史记录里移动urlhistory;两者都传时以 url 为准
    POST evaluate在页面主世界里执行 JavaScript按值返回结果;await_promise 会等待 Promise
    • wait_until 可选 loaddomcontentloadednetworkidlecommit,默认是 load
    • timeout 默认 30 秒;超时返回 503,标签页仍可继续使用。
    • history 可取 backforwardreloadevaluate 的结果在 data.value 中,JavaScript 异常在 data.exception 中,HTTP 状态仍为 200

    截图

    响应体就是图片:

    curl "$BASE_URL/v2/browser/screenshot?format=jpeg&quality=80" -o page.jpg
    curl "$BASE_URL/v1/browser/screenshot?format=jpeg&quality=80" -o page.jpg

    format 可选 png(默认)、jpegjpgquality 取值 0–100,只对 jpeg 生效,默认 85。

    full_page=true 截取整个可滚动页面,而不只是视口。PNG 响应还会带上 x-image-widthx-image-height

    页面快照

    调用 snapshot 获取页面结构,再用返回的 ref 操作元素:

    curl -X POST "$BASE_URL/v2/browser/snapshot" \
      -H "Content-Type: application/json" \
      -d '{"interactive_only": true}'
    
    curl -X POST "$BASE_URL/v2/browser/click" \
      -H "Content-Type: application/json" \
      -d '{"ref": "e13"}'
    curl -X POST "$BASE_URL/v1/browser/snapshot" \
      -H "Content-Type: application/json" \
      -d '{"interactive_only": true}'
    
    curl -X POST "$BASE_URL/v1/browser/click" \
      -H "Content-Type: application/json" \
      -d '{"ref": "e13"}'

    interactive_only 只保留可操作的元素。clickfillupload 也可以使用 CSS selector。每次导航后都要重新获取快照,旧的 ref 不再有效。

    标签页

    标签页对应 Chromium 的页面。

    路由作用说明
    GET tabs列出标签页每项包含 idtitleurltype
    POST tabs打开标签页url 可选,默认 about:blank
    POST tabs/{tab_id}/activate把标签页切到最前它会移到列表最前面;未知 id 返回 404
    DELETE tabs/{tab_id}关闭标签页未知 id 返回 404

    新标签页会成为默认目标。需要固定操作对象时,传入 tab_id;不传时,操作列表中的第一个标签页。

    curl "$BASE_URL/v2/browser/tabs"
    curl -X POST "$BASE_URL/v2/browser/tabs" \
      -H "Content-Type: application/json" \
      -d '{"url": "about:blank"}'
    curl "$BASE_URL/v1/browser/tabs"
    curl -X POST "$BASE_URL/v1/browser/tabs" \
      -H "Content-Type: application/json" \
      -d '{"url": "about:blank"}'

    POST tabs 不传 url 时打开 about:blankscreenshot 不支持 tab_id,始终截取第一个标签页。

    cookie 的读写使用 CDP 定义的结构:

    路由作用说明
    POST cookies设置 cookiebody 里的 cookies 是一个列表;响应返回条数
    GET cookies读取 cookie可按 urldomain 收窄
    DELETE cookies删除一条或全部name 配合 urldomain,或者 all=true

    设置 cookie 时必须提供 name,以及 urldomainpath。其他 CDP 字段可选;读取接口返回 Chromium 当前保存的值。

    请求日志

    GET network/requests 返回页面请求的只读日志,从第一次调用后开始收集,最多保留最近 300 条。limit 限制返回条数,clear=true 在读取后清空;该接口不支持请求拦截或请求头改写。

    窗口大小

    POST config 通过 CDP 调整浏览器窗口大小。

    resolution 必须使用支持的尺寸;其他组合返回 422。不传 resolution 时不修改窗口。

    原始 CDP 命令

    POST cdp 发送一条原始 CDP 命令,并将结果放在 data 中。REST API 未覆盖的能力可以使用该入口;需要连续发送多条命令时,建议直接建立 CDP 连接。

    错误处理

    状态码何时
    400参数缺失或请求体不是 JSON
    404元素或标签页不存在
    422参数值不受支持
    503CDP 不可达、导航超时或 CDP 执行失败

    JavaScript 异常不属于 HTTP 错误:evaluate 仍返回 200,异常放在 data.exception 中。

    桌面操作

    这不是页面级操作,而是真实的鼠标和键盘事件。请求会转发给 computer-use worker;worker 未运行时返回 503

    调用 POST /v2/computer/actions。详见 Computer Use

    调用 POST /v1/browser/actions。详见 Computer Use

    MCP 工具

    支持 MCP 的 agent 可以通过 /mcp 调用浏览器工具。AIO 镜像还会提供页面级的 browser_* 工具;裸 daemon 只提供基础浏览器工具。

    选择调用方式

    三种入口操作的是同一个 Chromium:

    入口提供代价
    CDP 客户端完整的页面自动化能力需要 CDP 客户端和 WebSocket
    REST API常用浏览器操作一次请求执行一个操作
    MCP以工具形式调用浏览器需要 MCP 客户端

    需要完整的页面自动化时使用 CDP;只做常用操作时直接调用 REST API;已经接入 MCP 的 agent 可以使用 MCP。

    Human in the loop

    人可以直接查看或接管 agent 正在操作的 Chromium。两种查看方式连接的是同一个浏览器环境:

    查看方式地址可以看到
    noVNC/vnc/index.html?autoconnect=true整个桌面,包括 Chromium、对话框和其他窗口
    DevTools/browser-ui/cdp/devtools/*当前 Chromium 页面

    noVNC 连接的是整个桌面,而不是单独的浏览器窗口。因此可以操作文件选择框、地址栏和其他应用窗口。即使 Chromium 重启,桌面仍会保留。noVNC 页面也可以嵌入 iframe。

    人和 agent 共享同一个浏览器状态。例如,在 noVNC 中完成登录后,agent 下一次调用 snapshot 就能看到登录后的页面。

    daemon 只提供 API;noVNC 和 DevTools 页面由镜像网关提供。部署和访问方式见 Computer Use