核心用法 / Core Usage
提取数据
当你要的是页面里的数据而不是操作时,别把整页 HTML 倒进上下文。
chrome-use 提供从轻到重的一整套抽取手段:结构化快照、按 ref 精准取值、
自定义形状的 eval、社区站点适配器,直到一步到位的 extract --schema。
本页帮你为每种页面挑到最省的那一个。
先选最省的工具
驱动一个真实浏览器是重活。只有当你确实需要登录态、交互、JS 渲染或反爬页面时, chrome-use 才值得启动。读一段公开静态文本,别开浏览器。先按这张表判断要不要开浏览器。
| 你要的是 | 用什么 |
|---|---|
| 发现有哪些内容 / 找信息源 | WebSearch |
| 静态或公开页面上的具体事实 | WebFetch 或 curl(不开浏览器) |
| 已知站点的结构化数据(GitHub issues、Reddit/HN 搜索、B 站/Twitter 信息流),尤其登录态之后 | chrome-use site <name>/<cmd>(见下)——跳过 snapshot+click |
| 任意页面的结构化数据(无社区适配器)——表格、搜索结果、信息流行、仪表盘 | chrome-use extract --schema '{rows,fields}' 一次调用出干净 JSON |
| 登录态、交互、JS 渲染或反爬页面 | chrome-use(本工具) |
| 用户此前保存过的页面 / 内部系统 | chrome-use find-url <keywords> |
结构化快照:snapshot --json
要让模型对页面内容做推理,最好的输入是结构化快照。
snapshot -i --json 把可交互元素连同 ref 一起输出成一行可解析的 JSON,
既紧凑又稳定,适合直接喂给下游逻辑。关于快照本身的读法见 读取页面。
# 结构化快照 —— 最适合让 AI 对页面内容做推理
$ chrome-use snapshot -i --json > page.json
精准抽取:get text / get attr
已经从快照里拿到 @ref 时,直接按 ref 取值最省事:
get text 拿可见文本,get attr 拿某个属性(如链接的 href)。
ref 每次 snapshot 都会重新分配,所以先快照、再取值。
# 按 ref 做定点抽取
$ chrome-use snapshot -i
$ chrome-use get text @e5
$ chrome-use get attr @e10 href
任意形状:用 eval 抽取
表格、列表这类需要自定义形状的数据,用一段 JavaScript 最直接:在页面里 querySelectorAll,
map 成你想要的对象数组返回。eval 跑在页面的 MAIN world,能直接读到真实 DOM。
# 用 heredoc 把脚本喂给 eval --stdin
$ cat <<'EOF' | chrome-use eval --stdin
const rows = document.querySelectorAll("table tbody tr");
Array.from(rows).map(r => ({
name: r.cells[0].innerText,
price: r.cells[1].innerText,
}));
EOF
eval --stdin(heredoc)、eval --file <path> 或 eval -b <base64>。
内联的 chrome-use eval "..." 会被 shell 转义搞坏,只适合简单的 ASCII 表达式。
tail/head/管道处理就被切碎。
eval --json 输出成一行可解析的 JSON,适合程序消费。
MAIN world 状态会跨调用保留
因为 eval 跑在页面 MAIN world 且状态跨调用持续,
一次调用里的顶层 const x/let x/var x 会和下一次相撞
(SyntaxError: Identifier 'x' has already been declared)。
解决办法:用不重名的变量、赋值到 window.x,或把整段包进 IIFE
(() => { const x = …; return x; })()。
站点适配器:读“站点 X 结构化数据”的最省路径
社区适配器是一小段按站点划分的 JS:在你登录态的标签页里直接打站点自己的
JSON API,返回干净结构化数据——不点击、不爬、不截图,比 snapshot+click 省得多。
有现成适配器时优先用它。
一步到位:extract --schema
既没有社区适配器、又懒得写 eval 时,用 extract --schema:
给它一个 {rows, fields} 形状,它一次调用就把表格、搜索结果、信息流行、仪表盘
抽成干净 JSON——省掉 N 次 find/get,也不用把整页 HTML 倒进上下文把窗口撑爆。
# rows = 重复容器的选择器;fields = 每行要取的字段
# 字段可简写成 CSS(默认取文本),或写成 { "sel": "…", "get": "text|@attr|html|value" }
$ chrome-use extract --schema '{"rows":".product","fields":{"name":".name","price":".price","href":{"sel":"a","get":"@href"}}}'
# 有 rows 时返回一个 JSON 数组,每个匹配的容器一行
[
{"name": "Widget A", "price": "$12.00", "href": "/p/a"},
{"name": "Widget B", "price": "$8.50", "href": "/p/b"}
]
rows 时,fields 直接对整个文档取值、返回单个对象——适合抓页头/元信息:
extract --schema '{"fields":{"title":"h1","canonical":{"sel":"link[rel=canonical]","get":"@href"}}}'。
schema 较长时用 --schema-file <path> 或 --stdin(heredoc)喂进去。
rows 和字段的选择器是 CSS。若 rows 不是合法 CSS
或没匹配到,会自动探测页面主导的重复容器(li/tr/重复 class)兜底;
真的一个都没有时,返回 diagnostic 列出页面上有哪些重复容器(li×3, a[href*=pulls]×3),
而不是一个没信息的 []。也接受数组形状的 schema:
{"items":[{"title":"…","url":"@href"}]}。
extract --schema 是单页单次调用。要跨多页累积、按条件筛选,把它包进 script 循环:
翻页 → extract → 合并。实测 HN 翻 3 页采集高分故事,从 13+ 次调用降到 1 次。见
脚本与批处理。
怎么选:一张速查卡
同一页数据往往有多条路,从便宜到贵大致是这个顺序。完整的「选哪个抽取工具」决策表(带「为什么」一列) 由 站点适配器 一页维护。