浏览器自动化

默认启用 自动化

CDP Chrome 自动化 — 快照、点击、导航、截图、标签页。通过基于 ref 的元素定位,使用 cli-jaw browser 命令控制 Chrome。

此技能默认启用,会在每个会话中自动注入。它需要 cli-jaw serve 正在运行,并且已安装 Google Chrome。

快速参考

技能名称browser
分类自动化
状态启用(默认加载)
依赖cli-jaw 二进制文件、Google Chrome
可选cliclick(Homebrew,用于基于坐标的点击)
截图保存路径~/.cli-jaw/screenshots/
相关技能desktop-controlweb-aivision-click
技能文件~/.cli-jaw/skills/browser/SKILL.md

前置条件

核心工作流

所有浏览器自动化遵循相同的循环:先获取快照以查看可交互元素,然后通过 ref ID 执行操作,再获取快照以验证结果。

snapshot --interactive act by ref or key snapshot verify

在导航、刷新、切换标签页或任何导致页面内容发生重大变化的操作后,请使用新的快照。Ref ID 属于最近一次可用的快照,可能会过时。

快速开始

# 启动自动化会话(无头模式,无可见窗口)
cli-jaw browser start --agent

# 启动交互式浏览器(手动模式,可见窗口)
cli-jaw browser start

# 导航到 URL
cli-jaw browser navigate "https://example.com"

# 获取交互式快照(显示 ref ID)
cli-jaw browser snapshot --interactive

# 点击一个 ref
cli-jaw browser click e3

# 输入文本并提交
cli-jaw browser type e5 "hello" --submit

# 截图
cli-jaw browser screenshot

快照输出

snapshot --interactive 命令返回页面上可交互元素的紧凑列表,每个元素都有一个短的 ref ID,供后续命令使用。

e1   link        "Gmail"
e2   link        "Images"
e3   textbox     "Search"             ← 在此输入:type e3 "query"
e4   button      "Google Search"      ← 点击:click e4
e5   button      "I'm Feeling Lucky"

e3 这样的 ref ID 是短期有效的,作用域仅限于最近一次快照。页面变化后请务必重新获取快照。

命令参考

浏览器管理

命令描述
cli-jaw browser start [--port <auto>] [--headless] [--agent]启动 Chrome。--agent = 无头自动化模式;不加参数 = 可见交互模式。
cli-jaw browser stop关闭浏览器会话。
cli-jaw browser status报告当前 CDP 连接状态和端口。
cli-jaw browser doctor [--json]诊断 CDP/运行时所有权不匹配和孤儿进程清理范围。
cli-jaw browser cleanup-runtimes [--json] [--close --force]默认执行试运行。仅在使用 --close --force 时关闭 jaw 拥有的孤儿运行时。
cli-jaw browser reset [--force]清除浏览器配置文件和截图。仅在用户明确请求时使用。

观察

命令描述
cli-jaw browser snapshot完整页面快照(所有节点)。
cli-jaw browser snapshot --interactive仅显示可交互元素及其 ref ID。推荐使用以节省 token 预算。
cli-jaw browser snapshot --interactive --max-nodes 30 --json限制节点数量并以 JSON 格式输出。
cli-jaw browser screenshot捕获当前视口。保存至 ~/.cli-jaw/screenshots/
cli-jaw browser screenshot --full-page全页面截图(滚动捕获)。
cli-jaw browser screenshot --ref e5通过 ref ID 截取特定元素。
cli-jaw browser screenshot --clip 0 0 320 180 --json裁剪区域截图,JSON 输出路径。
cli-jaw browser text提取页面所有可见文本。
cli-jaw browser text --format html以 HTML 格式提取页面内容。
cli-jaw browser get-dom --selector ".card" --max-chars 2000 --json获取匹配 CSS 选择器的 DOM 子树。
cli-jaw browser console --json --limit 20获取控制台日志条目。
cli-jaw browser network --json --limit 20获取网络请求日志。

操作

命令描述
cli-jaw browser click e3通过 ref ID 点击元素。
cli-jaw browser click e3 --double双击元素。
cli-jaw browser click e3 --right右键点击(上下文菜单)。
cli-jaw browser type e3 "hello"在输入框中输入文本。
cli-jaw browser type e3 "hello" --submit输入文本后按回车。
cli-jaw browser press Enter按下键盘按键(Enter、Escape、Tab 等)。
cli-jaw browser hover e5悬停在元素上。
cli-jaw browser select e7 "option1"在下拉菜单中选择选项。
cli-jaw browser drag e3 e5从一个元素拖拽到另一个元素。
cli-jaw browser mouse-click 400 300在绝对坐标处点击。
cli-jaw browser mouse-click 400 300 --double在坐标处双击。
cli-jaw browser move-mouse 400 300将鼠标移动到坐标处(不点击)。
cli-jaw browser mouse-down按下鼠标按钮。
cli-jaw browser mouse-up --right释放鼠标按钮(可选右键)。

导航和检查

命令描述
cli-jaw browser navigate "https://example.com"跳转到 URL。
cli-jaw browser open "https://example.com"navigate 的别名。
cli-jaw browser tabs列出所有已打开的标签页。
cli-jaw browser tabs --json以 JSON 格式列出标签页。
cli-jaw browser active-tab --json以 JSON 格式获取当前活动标签页信息。
cli-jaw browser tab-switch 2按索引切换标签页。
cli-jaw browser reload刷新当前页面。
cli-jaw browser resize 1440 900调整视口大小。
cli-jaw browser scroll --x 0 --y 1000滚动到绝对位置。
cli-jaw browser wait-for-selector ".toast-success" --timeout 30000等待 CSS 选择器出现。
cli-jaw browser wait-for-text "Dashboard" --timeout 30000等待页面上出现指定文本。
cli-jaw browser evaluate "document.title"在页面上下文中执行 JavaScript。
evaluate 是诊断命令。请勿在更高级别的供应商工作流(如 web-ai)中通过它执行任意用户提供的 JavaScript。

支持标签

场景标签说明
本地 cli-jaw browser 原语就绪仅支持服务器驱动的本地 Chrome/CDP
doctorcleanup-runtimes就绪默认试运行;关闭需要 --force
仪表盘可见/无头启动分离就绪可见手动模式和无头代理模式是分开的
web-ai 供应商工作流测试版请使用 web-ai 技能和供应商特定的门控
外部托管/云 CDP延期请勿声称支持远程浏览器托管

规则和约束

常见工作流

网页搜索

cli-jaw browser start --agent
cli-jaw browser navigate "https://www.google.com"
cli-jaw browser snapshot --interactive
cli-jaw browser type e3 "search query" --submit
cli-jaw browser snapshot --interactive
cli-jaw browser click e7

表单填写

cli-jaw browser snapshot --interactive
cli-jaw browser type e1 "John Doe"
cli-jaw browser type e2 "john@example.com"
cli-jaw browser click e3           # 提交按钮
cli-jaw browser snapshot           # 验证提交结果

读取页面内容

cli-jaw browser navigate "https://news.ycombinator.com"
cli-jaw browser text               # 纯文本提取
cli-jaw browser text --format html # HTML 内容
cli-jaw browser snapshot --interactive

AI 网页工作流

对于 ChatGPT 或其他 web-ai 工作流,请使用 web-ai 技能。浏览器技能负责底层页面控制;web-ai 负责结构化问题渲染、活动标签页安全性和响应基线处理。

~해줌 示例

触发浏览器技能的自然语言请求。支持韩语和英语。

示例 1
"구글 검색해줌 — CLI-JAW 설치 방법"
启动无头浏览器,导航到 Google,输入搜索查询并返回结果。触发 browser start --agent + navigate + type --submit + snapshot
示例 2
"이 웹사이트 스크린샷 찍어줌" / "이 페이지 캡처해줌"
导航到给定 URL,获取全页面截图,并返回保存的文件路径。使用 navigate + screenshot --full-page
示例 3
"이 페이지에서 로그인 폰 채워줌 — ID: admin, PW: test1234"
获取快照以找到登录表单字段,在用户名和密码输入框中输入凭据,然后提交。使用 snapshot --interactive + type + click
示例 4
"탭 목록 보여줌" / "열 려있는 탭 중에 구글 탭으로 전환해줌"
使用 tabs 列出已打开的标签页,然后使用 tab-switch 切换到匹配的标签页。多标签页管理工作流。
示例 5
"브라우저 상태 확인해줌" / "Chrome 안 되면 진단해줌"
运行 browser statusbrowser doctor --json 检查 CDP 连接状态、端口所有权和孤儿运行时状态。诊断工作流。

无头模式

三种运行 Chrome 无头模式的方式:

# 推荐用于自动化
cli-jaw browser start --agent

# 手动模式显式指定无头
cli-jaw browser start --headless

# 通过环境变量
CHROME_HEADLESS=1 cli-jaw browser start

所有代理自动化请使用 --agent。它避免弹出可见浏览器窗口,是自动化会话的预期默认值。

环境变量

变量描述
CHROME_HEADLESS=1为手动启动启用无头模式。
CHROME_NO_SANDBOX=1禁用 Chrome 沙盒。仅限 Docker/CI — 请勿在普通机器上使用。

默认 CDP 端口从 cli-jaw 服务器端口派生。仅在需要显式覆盖时使用 cli-jaw browser start --port <port>

独立 agbrowse 替代方案

当你明确需要驱动单个 Chrome 实例(例如,保持一个已登录的配置文件打开,避免同时运行 cli-jaw serve 和第二个 CDP 会话)时,相同的浏览器命令可通过独立的 agbrowse CLI(npm install -g agbrowse)使用。命令参数完全相同;仅二进制前缀不同。

cli-jaw browser 形式
agbrowse 形式
cli-jaw browser start --agent
agbrowse start
cli-jaw browser status
agbrowse status
cli-jaw browser navigate "<url>"
agbrowse navigate "<url>"
cli-jaw browser snapshot --interactive
agbrowse snapshot --interactive
cli-jaw browser click e3
agbrowse click e3
cli-jaw browser type e5 "hello" --submit
agbrowse type e5 "hello" --submit
cli-jaw browser screenshot
agbrowse screenshot
cli-jaw browser stop
agbrowse stop
请勿同时对同一个 --port 运行 cli-jaw browseragbrowse — 第二个启动会复用第一个 CDP,持久化状态文件可能会冲突。

运行时清理

# 诊断运行时状态
cli-jaw browser doctor --json

# 试运行:查看将被清理的内容
cli-jaw browser cleanup-runtimes

# 实际关闭 jaw 拥有的孤儿运行时
cli-jaw browser cleanup-runtimes --close --force

cleanup-runtimes 设计上是保守的。它仅作用于 jaw 拥有的 Chrome 启动时写入的持久 browser-runtime-owner.json 记录。进程命令行必须仍然匹配记录的 PID、CDP 端口和配置文件。包含 --type= 的 Chrome 辅助进程会被拒绝。切勿将通用 ps 输出作为 Chrome 进程可安全关闭的依据。

恢复策略

出现问题时,请先停下来检查状态,再执行下一步操作。

1
快照失败 — 使用 screenshot 进行视觉检查,查看页面上的实际内容。
2
找不到 Ref — 重新运行 snapshot --interactive。页面变化后 Ref 会过时。
3
异步 UI 未就绪 — 使用 wait-for-selectorwait-for-text 并设置适当的超时时间。
4
CDP 连接失败 — 报告确切错误,然后使用 status。仅在选择了该恢复路径时才执行 stop/start
5
Chrome/配置文件卡住 — 除非用户已请求破坏性重置,否则在执行 reset 前先询问。
6
DOM ref 不可用 — 仅在确认没有可用 ref 后,才使用 vision-click 技能作为显式回退。

故障排除

症状原因解决方法
CDP 连接被拒绝Chrome 未启动或端口错误cli-jaw browser status,然后使用预期端口启动
running:falseowner:jaw-owned运行时元数据过时或 CDP 已断开cli-jaw browser doctor,然后重试 browser start
旧的无头 jaw Chrome 仍在运行持久 jaw 拥有的孤儿候选进程cli-jaw browser cleanup-runtimes 试运行,然后 --close --force
窗口只打开测试浏览器Chrome 单例吸收了启动请求关闭所有 Chrome 窗口,然后使用 start --agent
无头 CDP 未打开在无 GUI 环境中未请求无头模式添加 --headless 或使用 --agent
端口冲突另一个进程占用了 CDP 端口选择不同的 --port
快照过大页面节点过多使用 --interactive--max-nodes 限制输出

计划中的运行时差异

以下命令是来自 30_browser 参考设计的计划对等目标。除非在后续 PRD 中明确升级,否则它们在当前运行时中不可用

计划中的观察和诊断命令

cli-jaw browser console --clear --reload --duration 3000
cli-jaw browser network --reload --duration 1000
cli-jaw browser wait 2000

计划中的操作命令

cli-jaw browser resize 0 0 --fullscreen
cli-jaw browser scroll down
cli-jaw browser scroll up --amount 1000
wait-for <ref> 在参考设计中已弃用,因为 ref 的作用域仅限于快照。请优先使用基于选择器或基于文本的等待。

相关技能

技能关系
desktop-control统一的桌面 + 浏览器自动化。将 DOM 目标路由到 CDP(浏览器技能),将桌面应用路由到 Computer Use。
web-aiAI 驱动的网页工作流(如 ChatGPT)。使用浏览器原语,但增加了结构化问题渲染和响应处理。
vision-click基于视觉的点击定位。用于非 DOM 元素(Canvas、WebGL、跨域 iframe)的回退方案。
screen-capture屏幕捕获和录制。通过系统级捕获补充浏览器截图。

注意事项