关于 vibe-check
用于通过 vibium 命令行自动化 Chrome 或 Firefox 的技能,涵盖元素查找、交互、页面检查、会话管理和内容捕获流程。
主要功能
- 01自动化 Chrome 和 Firefox
- 02元素映射与语义查找
- 03页面导航与交互
- 04截图、PDF 和录制
- 05浏览器会话与存储状态
适用场景
- 01自动执行浏览器表单流程
- 02检查页面内容与无障碍结构
- 03录制浏览器会话以供检查
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vibiumdev/ vibium --skill vibe-check安装后在 Claude Code 中输入/vibe-check确认已加载。
详细介绍
Vibium 浏览器自动化 — CLI 参考
vibium CLI 可从命令行自动化 Chrome(也可通过 --engine firefox 自动化 Firefox)。浏览器会在首次使用时自动启动(守护进程模式会让它在命令之间保持运行)。
vibium go <url> && vibium map && vibium click @e1 && vibium map
核心工作流
每次浏览器自动化都遵循以下模式:
- 导航:
vibium go <url> - 映射:
vibium map(获取@e1、@e2等元素引用) - 交互:使用引用进行点击、填写、选择等操作,例如
vibium click @e1 - 重新映射:导航或 DOM 发生变化后,使用
vibium map获取最新引用
二进制文件解析
运行任何命令前,先解析一次 vibium 二进制文件路径:
- 先尝试直接运行
vibium(通过npm install -g vibium全局安装时可用) - 回退到
./clicker/bin/vibium(项目根目录中的开发环境) - 回退到
./node_modules/.bin/vibium(本地 npm 安装)
运行 vibium --help(或已解析的路径)进行确认。后续所有命令都使用已解析的路径。
**Windows 提示:**路径中使用正斜杠(例如 ./clicker/bin/vibium.exe),并为包含空格的路径加引号。
命令串联
使用 && 串联命令,使其依次运行。遇到第一个错误时,命令串联会停止:
vibium go https://example.com && vibium map && vibium click @e3 && vibium diff map
**何时串联:**对于需要连续执行的步骤(导航 → 交互 → 验证),使用 &&。如果需要在步骤之间检查输出,则分别运行命令。
**何时不串联:**不要串联依赖解析上一步输出的命令(例如,读取映射输出后再决定要点击什么)。请分别运行这些命令,以便先分析结果。
命令
探索
vibium map— 映射交互元素并生成 @ 引用(建议在交互前使用)vibium map --selector "nav"— 将映射范围限定为 CSS 子树中的元素vibium diff map— 比较当前映射与上一次映射(查看发生了哪些变化)
导航
vibium go <url>— 前往页面vibium back— 返回上一页vibium forward— 前往下一页vibium reload— 重新加载当前页面vibium url— 打印当前 URLvibium title— 打印页面标题
读取内容
vibium text— 获取页面上的所有文本vibium text "<selector>"— 获取指定元素的文本vibium html— 获取页面 HTML(使用--outer获取 outerHTML)vibium find "<selector>"— 查找元素并返回@e1引用(可通过vibium click @e1点击)vibium find "<selector>" --all— 查找所有匹配元素 →@e1、@e2、...(使用--limit N限制数量)vibium find text "Sign In"— 按文本内容查找元素 →@e1vibium find label "Email"— 按标签查找输入框 →@e1vibium find placeholder "Search"— 按占位符查找 →@e1vibium find testid "submit-btn"— 按 data-testid 查找 →@e1vibium find xpath "//div[@class]"— 按 XPath 查找 →@e1vibium find alt "Logo"— 按 alt 属性查找 →@e1vibium find title "Settings"— 按 title 属性查找 →@e1vibium find role <role>— 按 ARIA 角色查找元素 →@e1(使用--name按可访问名称筛选)vibium eval "<js>"— 运行 JavaScript 并打印结果(使用--stdin从标准输入读取)vibium count "<selector>"— 统计匹配元素的数量vibium screenshot -o file.png— 截取屏幕截图(使用--full-page、--annotate)vibium a11y-tree— 获取无障碍树(使用--everything获取所有节点)
交互
vibium click "<selector>"— 点击元素(也接受来自 map 的@ref)vibium dblclick "<selector>"— 双击元素vibium type "<selector>" "<text>"— 在输入框中输入内容(追加到现有值)vibium fill "<selector>" "<text>"— 清空字段并输入新内容(替换现有值)vibium press <key> [selector]— 在元素或当前聚焦的元素上按键vibium focus "<selector>"— 聚焦元素vibium hover "<selector>"— 将鼠标悬停在元素上vibium scroll [direction]— 滚动页面(--amount N、--selector)vibium scroll into-view "<selector>"— 滚动页面使元素进入视野(居中)vibium keys "<combo>"— 按下按键(Enter、Control+a、Shift+Tab)vibium select "<selector>" "<value>"— 选择下拉选项vibium check "<selector>"— 勾选复选框或单选按钮(幂等)vibium uncheck "<selector>"— 取消勾选复选框(幂等)
鼠标操作
vibium mouse click [x] [y]— 在指定坐标或当前位置点击(--button 0|1|2)vibium mouse move <x> <y>— 将鼠标移动到指定坐标vibium mouse down— 按下鼠标按钮(--button 0|1|2)vibium mouse up— 释放鼠标按钮(--button 0|1|2)vibium drag "<source>" "<target>"— 将一个元素拖动到另一个元素
元素状态
vibium value "<selector>"— 获取 input/textarea/select 的值vibium attr "<selector>" "<attribute>"— 获取 HTML 属性值vibium is visible "<selector>"— 检查元素是否可见(true/false)vibium is enabled "<selector>"— 检查元素是否已启用(true/false)vibium is checked "<selector>"— 检查复选框或单选按钮是否已勾选(true/false)vibium is actionable "<selector>"— 检查元素是否可操作(true/false)
等待
vibium wait "<selector>"— 等待元素(--state visible|hidden|attached、--timeout ms)vibium wait url "<pattern>"— 等待 URL 包含指定子字符串(--timeout ms)vibium wait load— 等待页面完全加载(--timeout ms)vibium wait text "<text>"— 等待页面上出现指定文本(--timeout ms)vibium wait fn "<expression>"— 等待 JS 表达式返回真值(--timeout ms)vibium sleep <ms>— 暂停执行(最长 30000ms)
捕获
vibium screenshot -o file.png— 截取屏幕截图(--full-page、--annotate)vibium pdf -o file.pdf— 将页面保存为 PDF
对话框
vibium dialog accept [text]— 接受对话框(可选填写提示文本)vibium dialog dismiss— 关闭对话框
模拟
vibium viewport— 获取当前视口尺寸vibium viewport <width> <height>— 设置视口尺寸(使用--dpr设置设备像素比)vibium window— 获取操作系统浏览器窗口的尺寸和状态vibium window <width> <height> [x] [y]— 设置窗口尺寸和位置(--state)vibium media— 覆盖 CSS 媒体特征(--color-scheme、--reduced-motion、--forced-colors、--contrast、--media)vibium geolocation <lat> <lng>— 覆盖地理位置(--accuracy)vibium content "<html>"— 替换页面 HTML(使用--stdin从标准输入读取)
框架
vibium frames— 列出页面上的所有 iframevibium frame "<nameOrUrl>"— 按名称或 URL 子字符串查找框架
文件上传
vibium upload "<selector>" <files...>— 为 input[type=file] 设置文件
录制
vibium record start— 开始录制(--screenshots、--snapshots、--name、-o path— 默认文件名带时间戳,为record-<date>.zip,因此重复运行不会覆盖已有文件)vibium record stop— 停止录制并保存 ZIP(-o path可覆盖开始时指定的路径;输出会显示保存的文件名)
录制内容可以包含会话视频轨道(Firefox 154+、本地浏览器)。默认情况下,如果引擎支持视频录制,就会录制视频;否则会跳过,停止录制时会说明结果。传入 --video 可强制录制(在 Chrome 上会失败并显示说明性错误),传入 --video=false 可禁用录制,传入 --video-size 1280x720 / --video-fps 30 可覆盖视口默认值。视频会与跟踪文件一起放在录制 ZIP 中(video/<context>.webm);它会录制开始时处于活动状态的页面,不会跟随标签页切换。远程浏览器连接会录制除视频之外的所有轨道;传入 --video-remote keep 仍会录制视频,并将文件保留在远程主机上(停止录制时的输出会显示该文件在远程主机上的路径)。
vibium record start --video -o run.zip
# ... actions ...
vibium record stop
# Saved run.zip (23 steps, 14s video)
Cookie
vibium cookies— 列出所有 Cookievibium cookies <name> <value>— 设置 Cookievibium cookies clear— 清除所有 Cookie
存储状态
vibium storage— 导出 Cookie、localStorage 和 sessionStorage(-o state.json)vibium storage restore <path>— 从 JSON 文件恢复状态
下载
vibium download dir <path>— 设置下载目录
页面
vibium pages— 列出已打开的页面vibium page new [url]— 打开新页面vibium page new --isolated [url]— 打开拥有独立 Cookie 和存储的页面vibium page switch <index|url>— 切换页面vibium page close [index|page id]— 关闭页面
调试
vibium highlight "<selector>"— 以可视方式突出显示元素(3 秒)
会话
vibium start— 启动本地浏览器会话vibium start <url>— 启动并连接到远程浏览器vibium stop— 停止浏览器会话vibium daemon start— 启动后台浏览器vibium daemon status— 检查是否正在运行vibium daemon stop— 停止守护进程vibium --session <name> <command>— 在隔离的守护进程和浏览器中运行命令
常见模式
基于引用的工作流(推荐用于 AI)
vibium go https://example.com
vibium map
vibium click @e1
vibium map # re-map after interaction
验证操作是否成功
vibium map
vibium click @e3
vibium diff map # see what changed
读取页面
vibium go https://example.com && vibium text
填写表单(端到端)
vibium go https://example.com/login
vibium map
# Look at map output to identify form fields
vibium fill @e1 "[email protected]"
vibium fill @e2 "secret"
vibium click @e3
vibium wait url "/dashboard"
vibium screenshot -o after-login.png
限定范围的映射(大型页面)
vibium map --selector "nav" # Only map elements in <nav>
vibium map --selector "#sidebar" # Only map elements in #sidebar
vibium map --selector "form" # Only map form controls
语义查找(无需 CSS 选择器)
vibium find text "Sign In" # → @e1 [button] "Sign In"
vibium find label "Email" # → @e1 [input] placeholder="Email"
vibium click @e1 # Click the found element
vibium find placeholder "Search..." # → @e1 [input] placeholder="Search..."
vibium find testid "submit-btn" # → @e1 [button] "Submit"
vibium find alt "Company logo" # → @e1 [img] alt="Company logo"
vibium find title "Close" # → @e1 [button] title="Close"
vibium find xpath "//a[@href='/about']" # → @e1 [a] "About"
使用状态持久化进行身份验证
# Log in once and save state
vibium go https://app.example.com/login
vibium fill "input[name=email]" "[email protected]"
vibium fill "input[name=password]" "secret"
vibium click "button[type=submit]"
vibium wait url "/dashboard"
vibium storage -o auth.json
# Restore in a later session (skips login)
vibium storage restore auth.json
vibium go https://app.example.com/dashboard
提取结构化数据
vibium go https://example.com
vibium eval "JSON.stringify([...document.querySelectorAll('a')].map(a => ({text: a.textContent.trim(), href: a.href})))"
不渲染页面,检查其结构
vibium go https://example.com && vibium a11y-tree
远程浏览器
vibium start ws://remote-host:9515/session
vibium go https://example.com
vibium map
vibium stop
并发会话(隔离的浏览器)
# Two scripts on one host, each with its own daemon and browser
export VIBIUM_SESSION=checkout-tests
vibium go https://example.com/checkout
vibium daemon stop
# Or per command, to drive two browsers from one script
vibium --session buyer go https://shop.example.com
vibium --session seller go https://shop.example.com/admin
隔离页面(同一浏览器,不同的 Cookie 和存储)
# Lighter than a session: two logins in one browser, no second launch
vibium page new --isolated https://shop.example.com # prints (page: <id>)
vibium page new --isolated https://shop.example.com
vibium page close <id> # also removes the page's isolated context
多页面工作流
vibium page new https://docs.example.com
vibium text "h1"
vibium page switch 0
带注释的屏幕截图
vibium screenshot -o annotated.png --annotate
检查元素
vibium attr "a" "href"
vibium value "input[name=email]"
vibium is visible ".modal"
保存为 PDF
vibium go https://example.com && vibium pdf -o page.pdf
求值 / JavaScript
vibium eval 可用于执行 CLI 未直接覆盖的任何 DOM 查询或修改操作。
简单表达式 — 使用单引号:
vibium eval 'document.title'
vibium eval 'document.querySelectorAll("li").length'
复杂脚本 — 使用 --stdin 和 heredoc:
vibium eval --stdin <<'EOF'
const rows = [...document.querySelectorAll('table tbody tr')];
JSON.stringify(rows.map(r => {
const cells = r.querySelectorAll('td');
return { name: cells[0].textContent.trim(), price: cells[1].textContent.trim() };
}));
EOF
JSON 输出 — 使用 --json 获取机器可读的输出:
vibium eval --json 'JSON.stringify({url: location.href, title: document.title})'
重要提示: eval 会返回表达式结果。如果脚本没有返回值,结果将为 null。请务必确保最后一个表达式求值后得到所需的数据。
超时与等待
所有交互命令(click、fill、type 等)都会自动等待目标元素变为可操作状态。通常无需显式等待。
在以下情况使用显式等待:
- 等待导航: 点击跳转链接后,使用
vibium wait url "/dashboard" - 等待内容: 提交表单后,使用
vibium wait text "Success"等待确认信息 - 等待元素: 使用
vibium wait ".modal"等待模态框出现 - 等待页面加载: 导航到加载较慢的页面后,使用
vibium wait load - 等待 JS 条件: 使用
vibium wait fn "window.appReady === true"等待应用初始化 - 固定延迟(最后手段): 使用
vibium sleep 2000,仅在没有更好的信号时使用(最长 30s)
所有等待命令都接受 --timeout <ms>(默认值因命令而异)。
Ref 生命周期
页面发生变化时,Refs(@e1、@e2)会失效。以下操作后务必重新映射:
- 点击会跳转的链接或按钮
- 提交表单
- 动态内容加载(下拉菜单、模态框)
全局标志
| 标志 | 描述 |
|---|---|
--engine <name> | 浏览器引擎:chrome(默认)或 firefox(环境变量:VIBIUM_ENGINE) |
--channel <ch> | 引擎发布渠道 — Firefox:release(默认)或 beta;Chrome:stable(默认)、beta、dev 或 canary(环境变量:VIBIUM_ENGINE_CHANNEL) |
--headless | 隐藏浏览器窗口 |
--json | 以 JSON 格式输出 |
-v, --verbose | 调试日志 |
--session <name> | 用于并发使用的隔离守护进程和浏览器(环境变量:VIBIUM_SESSION) |
提示
- 所有 click/type/hover/fill 操作都会自动等待元素变为可操作状态
- 所有选择器参数也接受
vibium map返回的@ref - 交互前使用
vibium map发现可交互元素 - 在大型页面上使用
vibium map --selector减少干扰信息 - 使用
vibium fill替换字段的值,使用vibium type在其后追加内容 - 使用
vibium find text/find label/find testid按语义查找元素(比 CSS 选择器更可靠) - 使用
vibium find role按 ARIA 角色查找元素 - 使用
vibium a11y-tree在不进行视觉渲染的情况下了解页面结构 - 使用
vibium text "<selector>"读取特定部分 - 交互后使用
vibium diff map查看发生了哪些变化 - 对于复杂的 DOM 查询,可使用
vibium eval作为备用方案 vibium check/vibium uncheck具有幂等性 — 无需先检查状态即可安全调用- 截图默认保存到当前目录(使用
-o更改保存位置) - 使用
vibium storage/vibium storage restore在不同会话间保留身份验证信息 - 不使用
--session时,同一主机上的所有命令共享一个守护进程和一个浏览器 — 并发运行时请设置VIBIUM_SESSION