核心用法 / Core Usage

站点适配器

读「站点 X 的结构化数据」,最省的路径是跳过 snapshot + click。 在你 open、翻页、一路点击穿越 GitHub / Reddit / Bilibili 之前,先看有没有现成的 站点适配器——一小段社区写的 JS,在你登录态的标签页里直接打站点自己的 JSON API, 把干净的结构化数据一次交给你。不点击、不爬、不截图。

是什么

站点适配器(site adapter)是社区写的一个 JS 函数:它在你当前登录态的标签页里 直接调用站点自己的 JSON API,返回清洗好的结构化数据。本质上就是打包好的、按站点划分的 eval——只是不用你自己写,也不用摸清每个站点的接口。

因为它跑在你已经登录的那个标签页里、以你的身份发请求,所以像 bilibili/feedtwitter/… 这类需要登录态的信息流也能直接读到—— 这正是手拼 URL 或匿名抓取做不到的地方。

ℹ️ 和 eval 的关系
如果你已经会用 eval 打某个站点的内部接口,那站点适配器就是把这段代码 沉淀成命令、由社区维护、按站点归类。你少写一次脏活,别人也复用得到。

怎么用

四个动作:一次性拉包(update)、看装了哪些(list)、看某个适配器怎么调 (info)、运行它(site <name>/<cmd>)。

bash
$ chrome-use site update                            # 一次性:拉取适配器包(命令数随 bb-sites 同步增长)
$ chrome-use site list                              # 已装了哪些(github/issues、reddit/search…)
$ chrome-use site info github/issues                # 某适配器的参数 + 在哪个域名上跑
$ chrome-use site github/issues owner/repo --json   # 运行 → JSON(自动帮你导航过去)

加了 --json,最后一条命令返回的就是站点自己的数据,已经清洗成可解析的结构(下面为节选、缩进过):

site github/issues epiral/bb-sites --json 的返回
{
  "success": true,
  "data": {
    "domain": "github.com",
    "origin": "https://github.com/",
    "result": {
      "count": 30,
      "repo": "epiral/bb-sites",
      "state": "open",
      "issues": [
        {
          "number": 85,
          "title": "feat(youtube/transcript): migrate to API-based subtitles",
          "author": "kerrmoulton",
          "state": "open",
          "is_pr": true,
          "comments": 0,
          "labels": [],
          "created_at": "2026-06-16T07:54:47Z",
          "url": "https://github.com/epiral/bb-sites/pull/85"
        }
        // … 其余 29 条同构,count 是本次返回的总数
      ]
    }
  },
  "error": null
}
✅ 先 info,再 run
不确定某个适配器要什么参数时,先 site info <name>/<cmd> 看它的参数声明和目标域名, 再照着传。这比盲跑一次看报错更省。

参数与导航

适配器的参数按声明顺序用位置参数填入;想按名字覆盖某一个,就用 --key value。 两种写法可以混用:位置参数先占位,--key 再定点覆盖。

位置参数 vs --key 覆盖
# 位置参数按声明顺序填
$ chrome-use site github/issues owner/repo --json

# --key 按名覆盖(顺序无所谓)
$ chrome-use site reddit/search --query "chrome-use" --sort new --json

运行时它会导航到适配器声明的域名——如果你当前标签页已经在那个域名上,就复用当前标签页, 不新开。请求仍发生在你登录态的那个标签页里,所以 bilibili/feedtwitter/… 这类登录才可见的信息流照常返回(为什么能,见上面「是什么」)。

ℹ️ 它会帮你导航
你不必先手动 open 到目标站点。site <name>/<cmd> 会自己导航到适配器的域名再执行; 但你得已经登录那个站点,登录态信息流才读得到。

自动触发 —— 看到就用它

你不用记住哪些站点有适配器。chrome-use 会自动保持适配器包同步(首次使用 + 每周), 并且当你 open / navigate / snapshot 一个域名有适配器的页面时主动提示你:

自动提示 · stderr
$ chrome-use open https://github.com/epiral/bb-sites
# … 页面打开的同时,stderr 冒出一行:
💡 site adapters for github.com: github/issues, github/pulls, github/repo …
✅ 看到提示,优先用它列出的 site <name>/<cmd>
看到 💡 site adapters for <domain> 时,别再 snapshot + click 去读数据—— 直接用它点名的 site <name>/<cmd>:更省、更稳,而且已经装好了。你也不需要自己先跑 site update,用它给出的命令即可。
ℹ️ 全新环境的例外
只有在刚装好、适配器包还没拉取的全新环境里,点名一个 site <name>/<cmd> 可能提示「未安装」。这时手动跑一次 site update,再重跑那条命令即可。

什么时候用它 vs extract --schema vs snapshot

同一页数据往往有多条路。站点适配器是已知站点结构化数据的首选;没有合适适配器时, 再往下退。下面这张表帮你对号入座。

你的情况用什么为什么
已知站点的结构化数据(GitHub issues、Reddit/HN 搜索、B 站 / Twitter 信息流),尤其登录态之后 chrome-use site <name>/<cmd> 直接打站点 JSON API、以你身份运行,跳过 snapshot + click,最省最稳
任意页面的结构化数据,没有社区适配器——表格、搜索结果、信息流行、仪表盘 extract --schema '{rows,fields}' 给个形状,一次调用出干净 JSON,不用自己写 eval、也不倒整页 HTML
要给模型做推理、或需要拿 @ref 去交互 snapshot -i --json 结构化快照带稳定 ref,既能读也能驱动后续 click / type
需要自定义形状、逻辑较特殊的一次性抽取 eval --stdin 在页面 MAIN world 里直接写 JS,最灵活(适配器就是它的沉淀版)
ℹ️ 从便宜到贵的顺序
大致是:site 适配器 → extract --schema → snapshot/eval 循环。 有适配器就用适配器;没适配器但形状规整就 extract --schema;再不行才回到常规的 snapshot / eval 手动循环。数据抽取的全景见 提取数据

来源与许可

适配器来自 bb-sites 社区包。 chrome-use 负责在运行时拉取并执行它们——本仓库不打包、不重分发任何适配器代码, site update 每次从上游获取最新版本。

ℹ️ 运行时拉取,不内置
因为适配器是上游社区维护、运行时才拉取的,所以你看到的命令集会随 bb-sites 更新而变化; site list 反映的是你本地这一次同步到的版本。

下一步

站点适配器是数据抽取里最省的一档;配合下面这些手段覆盖其余场景。