目录

Obscura:Rust 实现的无头浏览器,专为 AI Agent 与网页爬取而生

项目概览

Obscura 是由 GitHub 用户 h4ckf0r0day 开发的一个开源无头浏览器(headless browser)引擎,完全由 Rust 语言编写。截至 2026 年 5 月,该项目已获得 9,624 颗 Stars,621 个 Forks,采用 Apache 2.0 许可证开源。

项目定位非常明确:替代 headless Chrome,作为 AI Agent 自动化和大规模网页爬取的后端引擎。Obscura 通过 V8 JavaScript 引擎执行真实 JS,支持 Chrome DevTools Protocol(CDP),可以无缝接入 Puppeteer 和 Playwright 的现有工具链。

核心设计理念来自官方 README 的一句话:

Designed for automation at scale, not desktop browsing.


Obscura vs Headless Chrome:核心差异

Obscura 最大的对手是 Google 官方的 headless Chrome。后者功能成熟,但体积庞大、资源消耗高、没有内置反检测能力。Obscura 在多个关键指标上实现了数量级差距:

指标ObscuraHeadless Chrome
内存占用30 MB200+ MB
二进制文件大小70 MB300+ MB
内置反指纹
页面加载速度85 ms~500 ms
冷启动时间即时~2 秒
Puppeteer 支持
Playwright 支持

这些数据来自项目 README 中的官方对比表格。可以看到,Obscura 在资源效率和反检测能力上有结构性优势,适合需要长时间运行大量浏览器实例的 AI Agent 场景。


安装方式

Obscura 提供两种安装途径:下载预编译二进制,或从源码构建。

下载二进制

官方在 GitHub Releases 页面提供跨平台二进制:

# Linux x86_64
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz

# macOS Apple Silicon
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz

# macOS Intel
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-macos.tar.gz
tar xzf obscura-x86_64-macos.tar.gz

二进制为单文件,无任何外部依赖(不需要 Chrome、不需要 Node.js)。

从源码构建

需要 Rust 1.75+(通过 rustup.rs 安装):

git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
cargo build --release

# 启用 stealth 模式(反指纹 + 追踪器屏蔽)
cargo build --release --features stealth

首次从源码构建耗时约 5 分钟,原因是 V8 引擎需要从源码编译,之后会被缓存。


快速上手

Obscura 提供三个核心 CLI 子命令:fetch(单页抓取)、serve(CDP 服务器)、scrape(并行多页爬取)。

obscura fetch — 单页抓取

# 获取页面标题
obscura fetch https://example.com --eval "document.title"

# 提取所有链接
obscura fetch https://example.com --dump links

# 渲染 JS 后导出 HTML
obscura fetch https://news.ycombinator.com --dump html

# 等待动态内容加载完毕
obscura fetch https://example.com --wait-until networkidle0

obscura serve — 启动 CDP 服务器

# 默认端口 9222
obscura serve --port 9222

# 开启 stealth 模式(反检测 + 追踪器屏蔽)
obscura serve --port 9222 --stealth

# 设置代理
obscura serve --port 9222 --proxy http://127.0.0.1:7890

启动后,Obscura 作为一个 CDP WebSocket 服务器运行,客户端(Puppeteer / Playwright)通过 ws://127.0.0.1:9222/devtools/browser 连接。

obscura scrape — 并行多页爬取

obscura scrape https://site1.com https://site2.com https://site3.com \
  --concurrency 25 \
  --eval "document.querySelector('h1').textContent" \
  --format json

scrape 会启动多个 worker 进程并行抓取,适合批量 URL 场景。


Puppeteer / Playwright 集成

Obscura 实现了一套完整的 Chrome DevTools Protocol,可以通过 Puppeteer 或 Playwright 的 CDP 连接方式直接使用,无需修改任何代码。

Puppeteer 示例

npm install puppeteer-core
import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser',
});

const page = await browser.newPage();
await page.goto('https://news.ycombinator.com');

const stories = await page.evaluate(() =>
  Array.from(document.querySelectorAll('.titleline > a'))
    .map(a => ({ title: a.textContent, url: a.href }))
);
console.log(stories);

await browser.disconnect();

Playwright 示例

npm install playwright-core
import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP({
  endpointURL: 'ws://127.0.0.1:9222',
});

const page = await browser.context().newPage();
await page.goto('https://en.wikipedia.org/wiki/Web_scraping');
console.log(await page.title());

await browser.close();

表单提交与登录

README 提供了一个完整的表单登录示例:

await page.goto('https://quotes.toscrape.com/login');
await page.evaluate(() => {
  document.querySelector('#username').value = 'admin';
  document.querySelector('#password').value = 'admin';
  document.querySelector('form').submit();
});
// Obscura 会处理 POST、跟随 302 重定向、维护 cookie

这说明 Obscura 完整实现了浏览器级别的会话管理。


性能基准

README 中提供了两组基准数据,直接对比 Obscura 与 Chrome 的页面加载时间:

页面加载速度:

页面类型ObscuraChrome
静态 HTML51 ms~500 ms
JS + XHR + fetch84 ms~800 ms
动态脚本78 ms~700 ms

这组数据来自项目 README,说明 Obscura 在 JS 执行场景下相比 Chrome 有接近 10 倍的速度优势。但需注意:这些数据未说明测试环境、并发条件或具体页面 URL,读者在实际部署时应自行验证。


Stealth 模式:反指纹与追踪屏蔽

Obscura 的 stealth 模式是其差异化能力的核心体现,通过 Cargo feature 启用:

cargo build --release --features stealth
# 或在 CLI 中
obscura serve --port 9222 --stealth

反指纹机制

Stealth 模式包含以下具体能力:

  • 每会话指纹随机化:GPU、屏幕、Canvas、Audio、电池等指纹维度在每次会话时随机化
  • 真实的 navigator.userAgentData:使用 Chrome 145 的高熵值,而非伪造的固定字符串
  • event.isTrusted = true:对所有 dispatch 的事件标记为可信,这是很多反爬系统检测无头浏览器的关键指标
  • Object.keys(window) 安全:隐藏内部属性,避免脚本通过枚举 window 键发现异常
  • Function.prototype.toString() 遮蔽:返回 [native code],与真实 Chrome 一致
  • navigator.webdriver = undefined:而非 headless Chrome 默认的 true

这些机制使 Obscura 在面对基于 JavaScript 指纹检测的反爬系统时,有更强的隐蔽性。

追踪器屏蔽

Stealth 模式内置了一个覆盖 3,520 个域名的追踪器屏蔽列表,自动拦截分析广告、遥测和指纹脚本,从源头减少被追踪的可能。README 明确指出这一功能是"自动启用"的(--stealth 开启后)。


CDP API 覆盖范围

Obscura 实现了 Chrome DevTools Protocol 的多个核心域,支持以下操作:

Domain支持的操作
TargetcreateTarget, closeTarget, attachToTarget, createBrowserContext, disposeBrowserContext
Pagenavigate, getFrameTree, addScriptToEvaluateOnNewDocument, lifecycleEvents
Runtimeevaluate, callFunctionOn, getProperties, addBinding
DOMgetDocument, querySelector, querySelectorAll, getOuterHTML, resolveNode
Networkenable, setCookies, getCookies, setExtraHTTPHeaders, setUserAgentOverride
Fetchenable, continueRequest, fulfillRequest, failRequest(实时拦截)
StoragegetCookies, setCookies, deleteCookies
InputdispatchMouseEvent, dispatchKeyEvent
LPgetMarkdown(DOM 转 Markdown)

值得注意的是 Fetch 域的完整实现——这意味着 Obscura 支持对 HTTP 请求和响应进行实时拦截、修改、替换或主动失败,是做反向代理测试或数据脱敏的强大工具。


CLI 参考

obscura serve

参数默认值说明
--port9222WebSocket 监听端口
--proxyHTTP/SOCKS5 代理地址
--stealthoff启用反检测 + 追踪屏蔽
--workers1并行 worker 进程数
--obey-robotsoff遵守 robots.txt

obscura fetch <URL>

参数默认值说明
--dumphtml输出格式:html / text / links
--eval要执行的 JavaScript 表达式
--wait-untilload等待时机:load / domcontentloaded / networkidle0
--selector等待指定 CSS 选择器出现
--stealthoff反检测模式
--quietoff关闭启动 banner

obscura scrape <URL...>

参数默认值说明
--concurrency10并行 worker 数
--eval每个页面执行的 JS 表达式
--formatjson输出格式:json / text

适用场景与边界

适合的场景

  • AI Agent 自动化:需要浏览器级操作能力(点击、表单、JS 执行)但不能依赖笨重的 Chrome 实例
  • 大规模网页爬取:对性能和资源占用敏感,需要并行抓取大量页面
  • 替代 Puppeteer/Playwright 的 Chrome 依赖:已有代码基于 Puppeteer/Playwright,希望换掉底层浏览器而不改业务代码
  • 需要反检测能力的爬虫项目:面对基于指纹检测的反爬系统,headless Chrome 已被识别

边界与局限

  • V8 版本同步:Obscura 依赖特定版本的 V8,与官方 Chrome 的 JS 引擎行为可能存在差异,遇到极端兼容性问题时需要对照测试
  • 非桌面浏览器:项目明确表示面向自动化规模设计,不适合桌面浏览测试场景
  • Stealth 模式仍有局限:README 中的 stealth 功能列表是静态描述,实际反检测效果取决于目标网站的检测强度,不保证对所有网站都有效
  • 生态系统成熟度:相比有数年积累的 Puppeteer/Playwright,Obscura 的社区和周边工具仍在建设阶段,遇到问题时的参考资料相对有限

总结

Obscura 是 Rust 生态中一个值得关注的无头浏览器项目。它的核心价值在于:以远低于 Chrome 的资源占用,实现了同等的 JS 执行能力和 CDP 协议覆盖,同时内置了反指纹和追踪屏蔽能力。对于需要大规模浏览器自动化的 AI Agent 项目,以及对性能敏感的网络爬取场景,Obscura 提供了一个轻量级的替代方案。

如果你正在用 Puppeteer 或 Playwright 构建爬虫或 Agent,尝试将底层浏览器换成 Obscura,可能会有意外的收益——特别是在多实例并行运行的场景下。

项目地址:https://github.com/h4ckf0r0day/obscura