Obscura CLI 指南——七种输出格式与并发抓取

Obscura 命令行的完整操作手册。fetch 命令的七种 --dump 输出格式、scrape 并发抓取、--eval 执行 JS、等待策略与超时控制。

亿牛云技术团队2026年7月1日5 分钟阅读

一条命令等于一个浏览器

Obscura CLI 是项目最直接的使用方式。你不需要写代码、不需要启动服务、不需要安装 Chrome——下载一个二进制文件,即可开始抓取网页。

CLI 入口是 obscura 命令,由四个子命令组成:

  • obscura fetch <URL> — 抓取单个页面并输出数据
  • obscura serve — 启动 CDP WebSocket 服务,供 Puppeteer/Playwright 连接
  • obscura scrape <URL...> — 并发抓取多个页面
  • obscura mcp — 启动 MCP 服务器,供 AI Agent 使用

本文聚焦 fetchscrape 两个数据提取命令。

安装与验证

从 Releases 下载对应平台的二进制:

# Linux x86_64
curl -LO https://example.com/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
 
# macOS Apple Silicon
curl -LO https://example.com/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz
```bash
 
验证安装:
 
```bash
./obscura --version
./obscura fetch https://example.com --eval "document.title" --quiet
```bash
 
结果输出纯文本格式的页面标题。
 
## obscura fetch:七种输出格式
 
`fetch` 是最核心的子命令。`--dump` 参数控制输出格式,共七种。
 
### --dump html
 
默认格式。返回 JavaScript 渲染完成后的完整 HTML 字符串。
 
```bash
obscura fetch https://httpbin.org/anything --dump html
```bash
 
适用于后续用其他工具解析 HTML 结构的场景。
 
### --dump text
 
纯文本格式。去除所有标记、样式和脚本,只保留可见文本。
 
```bash
obscura fetch https://httpbin.org/anything --dump text
```bash
 
适合做全文搜索、关键词提取、字数统计。
 
### --dump markdown
 
转换为 Markdown 格式。保留标题层级、列表、链接、代码块、图片、表格结构。
 
```bash
obscura fetch https://example.16yun.cn/help/quickstart/ --dump markdown > page.md
```bash
 
这是最推荐用于 LLM / RAG 场景的格式——结构清晰、Token 消耗少。
 
### --dump links
 
提取页面中所有 `<a href>` 链接,每行一个。URL 去重后输出。
 
```bash
obscura fetch https://example.com --dump links
```bash
 
适用于 SEO 分析、外链检查、网站地图构建。
 
### --dump assets
 
 NDJSON 格式输出页面引用的所有子资源 URL,包括:
 
- 样式表(`<link rel="stylesheet">`
- 脚本(`<script src>`
- 图片(`<img src>`
- 字体、iframe、embed、object
- JavaScript 发起的 fetch/XHR 请求
 
```bash
obscura fetch https://example.com --dump assets
```bash
 
每行一个 JSON 对象,便于管道处理。
 
### --dump original
 
输出服务器返回的原始 HTTP 响应体,不经过 JavaScript 渲染。二进制安全。
 
```bash
obscura fetch https://httpbin.org/image/png --dump original > photo.jpg
```bash
 
适用于获取图片、JSON API、CSS、JS 等非 HTML 资源。
 
### --dump cookies
 
输出浏览器 Cookie Jar 中所有 Cookie 的 JSON 数组,包括 HttpOnly 标记的 Cookie(`document.cookie` 看不到的那些)。
 
```bash
obscura fetch https://example.com --dump cookies
```bash
 
适用于提取反 Bot 挑战后设置的 Session Token。
 
## --eval 执行 JavaScript
 
 `--eval` 在页面加载后执行任意 JavaScript 表达式,返回结果:
 
```bash
obscura fetch https://httpbin.org/anything --eval "JSON.stringify(Array.from(document.querySelectorAll('.titleline > a')).map(a => ({title: a.textContent, url: a.href})))"
```bash
 
注意:如果 `--eval`  `const` 开头定义的表达式会返回 `null`(V8 中 `const` 声明的 completion value 为空)。建议用 IIFE 包裹:
 
```bash
obscura fetch https://example.com --eval "(function(){ return document.title; })()"
```bash
 
`--eval` 可以单独使用,也可以与 `--dump` 组合——先执行 eval,让异步操作完成,再读取页面内容。
 
## 等待策略
 
SPA 页面需要等待 JavaScript 执行完成后才能读取内容。`--wait-until` 控制等待条件:
 
```bash
# 等待 load 事件(默认)
obscura fetch https://example.16yun.cn --wait-until load
 
# 等待 DOMContentLoaded
obscura fetch https://example.16yun.cn --wait-until domcontentloaded
 
# 等待网络空闲(无请求 500ms)
obscura fetch https://example.16yun.cn --wait-until networkidle0
 
# 等待网络基本空闲(无请求 500ms,允许 2 个以内连接)
obscura fetch https://example.16yun.cn --wait-until networkidle2
```bash
 
`--wait` 参数在等待条件满足后再额外停留一段时间,让异步定时器完成:
 
```bash
obscura fetch https://example.16yun.cn --wait 10
```bash
 
## --selector 限定区域
 
 CSS 选择器限定输出范围,跳过导航、侧栏和页脚:
 
```bash
obscura fetch https://example.com --selector "main" --dump markdown
obscura fetch https://example.com --selector "article.post" --dump text
```bash
 
 `--dump markdown` 组合时特别有用——只提取正文内容。
 
## --timeout 与进程级硬截止
 
`--timeout` 控制导航超时时间(默认 30 秒):
 
```bash
obscura fetch https://example.16yun.cn --timeout 60
```bash
 
Obscura 还有一个进程级硬截止线程,在 `timeout + wait + 10` 秒后强制退出进程。这是最后的兜底——V8 watchdog 无法终止已经进入 Rust op 的同步调用,硬截止从操作系统层面保证一个坏页面不会挂死 Worker。
 
## obscura scrape:并发抓取
 
`scrape` 命令用 Worker 进程并发抓取多个 URL:
 
```bash
obscura scrape url1 url2 url3 --concurrency 25 --format json
```bash
 
参数说明:
 
- `--concurrency`:并发 Worker 数(默认 10)
- `--format`:输出格式,`json`  `text`
- `--timeout`:每个 Worker 的超时时间(默认 60 秒)
- `--eval`:每个页面执行的 JS
- `--quiet`:静默模式,抑制进度输出
 
 stdin 读取 URL 列表:
 
```bash
cat urls.txt | obscura scrape --concurrency 20 --format json -
```bash
 
要求 `obscura-worker`  `obscura` 在同一目录下。
 
## 输出与管道集成
 
`--output`(或 `-o`)参数将结果写入文件:
 
```bash
obscura fetch https://example.com --dump markdown --output page.md
obscura fetch https://example.com --eval "document.title" -o title.txt
```bash
 
`--quiet` 抑制横幅和日志,使输出适合脚本化:
 
```bash
obscura fetch https://example.com --dump text --quiet | wc -w
```bash
 
结合标准的 Unix 管道:
 
```bash
obscura fetch https://example.com --dump links --quiet | grep 'blog' | head -10
```bash
 
## 全局参数
 
以下是适用于所有子命令的全局参数:
 
| 参数 | 作用 |
|------|------|
| `--proxy <URL>` | HTTP/SOCKS5 代理 |
| `--stealth` | 启用反检测模式 |
| `--user-agent <UA>` | 自定义 UA |
| `--allow-private-network` | 允许访问内网地址(默认禁止) |
| `--v8-flags <FLAGS>` | 传递 V8 参数 |
| `--verbose` | 详细日志 |
 
```bash
obscura --proxy socks5://127.0.0.1:1080 --stealth fetch https://example.com --dump markdown
```bash
 
## 完整示例:抓取 SPA 页面并保存 Markdown
 
这是一个端到端的实用示例:
 
```bash
# 设置代理和超时
export OBSCURA_PROXY=http://user:pass@proxy.16yun.cn:8888
 
# 抓取 SPA 页面,等待 networkidle0,提取正文为 Markdown
obscura fetch https://example.16yun.cn \
  --wait-until networkidle0 \
  --selector "main" \
  --dump markdown \
  --output article.md \
  --stealth
 
# 提取页面标题
obscura fetch https://example.16yun.cn \
  --eval "document.title" \
  --quiet
```bash
 
## 环境变量调优
 
通过环境变量控制超时和资源:
 
```bash
export OBSCURA_NAV_TIMEOUT_MS=60000
export OBSCURA_FETCH_TIMEOUT_MS=15000
obscura fetch https://example.16yun.cn --dump text
```bash
 
完整的环境变量列表见官方文档。
 
## 总结
 
`obscura fetch`  `obscura scrape` 覆盖了从单页抓取到并发批量的全部需求。七种输出格式适配不同的下游处理场景,`--eval` 提供了无上限的灵活性,而等待策略和超时体系确保你能可靠地处理 SPA 和慢页面。

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。