📦 无浏览器(unbrowser)
v0.0.5无需启动Chrome即可进行廉价的首次网络浏览 —— 获取SSR页面,跟踪链接,查询DOM,运行JS,检测bot-wall挑战。升级到OpenCL...
运行时依赖
安装命令
点击复制技能文档
unbrowser — 免 Chrome 首次浏览 unbrowser 是一个单独的静态二进制文件,它在 QuickJS 中运行页面 JS,并通过 JSON-RPC 暴露一个有状态的会话。它补充了 OpenClaw 的托管浏览器:首先使用 unbrowser 浏览静态/SSR/docs/搜索结果页面,当页面提示您时(如下所示的信号),升级到托管浏览器。
何时更喜欢 unbrowser 文档站点、GitHub/GitLab UI、PyPI/npm 注册页面、MDN、Stack Overflow Hacker News、Reddit(old.reddit / .json 端点)、Wikipedia、新闻文章 搜索结果提取(Google/DDG SERPs、GitHub 搜索、包索引) 任何以前使用 curl 但响应为空的流程,因为网站是一个 SPA shell — unbrowser 运行脚本并填充 DOM 简单 HTML 表单的多步骤流程(HN 搜索、Wikipedia 搜索)— 导航 → 输入 ref → 提交
何时升级到 OpenClaw 的托管浏览器 不要在这些情况下重试 unbrowser 将其交给托管浏览器:导航返回一个非空挑战 这是一个检测到的 bot墙(Cloudflare、Datadome、PerimeterX、Akamai BMP、Imperva、Arkose、Turnstile、reCAPTCHA、press-and-hold) clearance_cookie 和 hint 字段告诉您要恢复哪个 cookie 以及如何通过 cookies_set 将其插入 blockmap.density.likely_js_filled === true SSR shell 具有空的 /
| / 安装 pip install pyunbrowser # 或使用 pipx 以获得隔离的 CLI: pipx install pyunbrowser # 或使用 uv: uv tool install pyunbrowser 轮子在内部包含特定于平台的本机二进制文件,并在 $PATH 上注册 unbrowser 脚本 macOS(arm64/x86_64)和 Linux(x86_64)得到支持;其他平台必须从源代码构建(cargo install --git https://github.com/protostatis/unbrowser) PyPI 分发名称是 pyunbrowser,而不是 unbrowser,这是由于 PyPI 名称审查;二进制文件和导入名称仍然是 unbrowser 快速入门(RPC over stdio) unbrowser 在 stdin 上读取 JSON-RPC 命令,并在 stdout 上写入响应 每个会话一个进程 — cookie、解析的 DOM 和 JS 状态在命令之间保持 unbrowser <<'EOF' {"jsonrpc":"2.0","id":1,"method":"navigate","params":{"url":"https://news.ycombinator.com"}} {"jsonrpc":"2.0","id":2,"method":"query","params":{"selector":".titleline > a"}} {"jsonrpc":"2.0","id":3,"method":"close"} EOF 导航返回 {status, url, bytes, blockmap, challenge} blockmap 是您的单次定向有效负载 — 使用它来计划查询,然后提取原始 HTML 快速入门(Python) from unbrowser import Client with Client() as ub: r = ub.navigate("https://news.ycombinator.com") if r.get("challenge"): # bot墙 — 升级到托管浏览器 raise RuntimeError(f"被 {r['challenge']['vendor']} 阻塞;升级") if r["blockmap"]["density"].get("likely_js_filled"): # SSR shell — 尝试 JSON 存储,否则升级 ... for s in ub.query(".titleline > a")[:5]: print(s["text"], s["attrs"]["href"]) RPC 方法(摘要) navigate {url} — 使用 Chrome 指纹的 TLS 的 GET、解析并返回 blockmap + 挑战检测 query {selector} — querySelectorAll 支持标签/ID/类/属性(= ^= $= *= ~=)、所有四个组合器和:first-child / :last-child / :first-of-type / :last-of-type / :nth-child(N|odd|even) / :nth-of-type(N|odd|even) / :only-child / :only-of-type 不支持::not()、:has()、An+B text {selector?} — 第一个匹配的 textContent(默认 body) body — 最后导航的原始 HTML blockmap — 在 eval 后的 JS 修改 DOM 后重新计算 click {ref} — 在 ref 元素上分派点击(例如 e:142) 自动跟随 type {ref, text} — 设置值,触发输入 + 更改 submit {ref} — 收集 GET 表单字段,导航到操作 URL cookies_set / cookies_get / cookies_clear — cookie jar;用于重放从托管浏览器获得的清除 cookie eval {code} — 会话中的任意 JS close — 退出 |