Obscura 是什么——开源无头浏览器引擎
Obscura 是一个用 Rust 编写的开源无头浏览器引擎,专为 AI Agent 自动化和网页抓取设计。30 MB 内存、85 ms 页面加载、内置反检测、CDP 协议兼容。
无头浏览器的新选择
做网页抓取和 AI Agent 自动化的开发者,几乎都绕不开 Headless Chrome。它功能完整,但也存在几个长期痛点:
- 内存膨胀:一个实例轻松吃掉 200+ MB
- 启动慢:冷启动约 2 秒,批量轮转时成本叠加
- 反检测缺失:默认暴露
navigator.webdriver,TLS 指纹和 Chrome 有差异 - 二进制体积大:300+ MB,容器镜像臃肿
Obscura 从零开始解决这些问题。
Obscura 是什么
Obscura 是一个用 Rust 编写的开源无头浏览器引擎。它内嵌 V8 JavaScript 引擎(通过 deno_core),维护真实的 DOM 树,并通过 Chrome DevTools Protocol(CDP) 对外暴露接口,可以直接替换 Headless Chrome 供 Puppeteer 和 Playwright 使用。
项目在 Apache 2.0 许可证下开源,托管于 GitHub。
核心指标
| 指标 | Obscura | Headless Chrome |
|---|---|---|
| 运行时内存 | ~30 MB | 200+ MB |
| 二进制体积 | ~70 MB | 300+ MB |
| 页面加载(静态) | ~51 ms | ~500 ms |
| 页面加载(JS+XHR) | ~84 ms | ~800 ms |
| 冷启动 | 瞬时 | ~2 s |
| 反检测能力 | 内置 Stealth | 无 |
| Puppeteer 兼容 | 是(CDP) | 是 |
| Playwright 兼容 | 是(CDP) | 是 |
| 许可证 | Apache 2.0 | BSD |
基准测试数据和项目代码均开源在 GitHub。
三种使用方式
Obscura 提供了三种不同层次的接入方式,适配不同场景。理解三者的差异,是选型第一步:CLI 适合单次抓取和脚本编排,CDP 服务适合已有 Puppeteer/Playwright 代码迁移,MCP 适合让大模型直接驱动浏览器。
1. CLI 命令行
下载单二进制,无需 Chrome、Node.js 或任何依赖。直接抓取页面:
obscura fetch https://example.com --dump text
obscura fetch https://httpbin.org/anything --eval "document.title"
obscura scrape url1 url2 url3 --concurrency 25 --format json这是最轻量的使用方式。一个命令等于一个完整的无头浏览器。
2. CDP 协议服务
启动 WebSocket 服务,Puppeteer 或 Playwright 通过 CDP 连接:
obscura serve --port 9222Puppeteer 侧:
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://example.com');
console.log(await page.title());
await browser.disconnect();Playwright 侧:
import { chromium } from 'playwright-core';
const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
const page = await browser.newContext().then(ctx => ctx.newPage());
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();注意 Playwright 用的是 connectOverCDP(直接传 WebSocket 地址字符串),不要用 connect——后者走的是 Playwright 私有协议,Obscura 不实现。
3. MCP 服务器
为 AI Agent 提供浏览器工具接口:
obscura mcpClaude Desktop、Claude Code 或 Cursor 等 MCP 客户端可以直接调用 browser_navigate、browser_click、browser_fill、browser_snapshot 等浏览器工具。工具覆盖导航、读取、交互、等待、Cookie、标签页等类别,让大模型像调用函数一样驱动浏览器。
Stealth 反检测
Obscura 内置 Stealth 模式,用 --stealth 全局参数开启:
obscura fetch https://example.16yun.cn --stealth
obscura serve --stealth
obscura scrape url1 url2 --stealth
obscura mcp --stealthStealth 模式会做以下几件事:
- TLS 指纹伪装:通过 wreq(BoringSSL)呈现真实 Chrome 的 ClientHello
- 浏览器 Profile:内置一组真实浏览器 Profile(Windows 与 macOS 混合,近期 Chrome 版本),
navigator.platform、userAgentData、UA、GPU renderer 之间内部一致 - API 伪装:
navigator.webdriver = undefined、Function.prototype.toString返回[native code] - Tracker 拦截:内置 Peter Lowe 屏蔽列表,3500+ 域名,自动拦截分析脚本和广告
需要特别强调一点:Stealth 不是万能的。它能搞定基于 TLS 指纹和 JS 特征的被动检测,但面对 Cloudflare 交互式挑战、CAPTCHA、Datadome 主动 Bot 管理这类场景仍需配合住宅代理使用。
请求拦截
Obscura 对网络请求有完整的控制能力。既可以通过 CDP 的 Fetch.enable 从 Puppeteer 侧拦截,也可以通过 Rust 库侧的 enable_interception 通道在代码层面控制:
// Puppeteer 拦截示例
page.on('request', req => {
if (req.resourceType() === 'image') req.abort();
else req.continue();
});// Rust 库拦截示例
let mut rx = page.enable_interception();
while let Some(req) = rx.recv().await {
if req.url.contains("/ads") {
req.resolver.send(InterceptResolution::Fail { reason: "blocked".into() });
} else {
req.resolver.send(InterceptResolution::Continue { url: None, method: None, headers: None, body: None });
}
}拦截在实际项目里的价值远不止屏蔽广告:批量采集时砍掉图片和字体能成倍降低带宽和加载时间;用 Mock 响应替换特征接口可以绕过前端校验;监听 on_response 则是抓取 SPA 异步加载数据的主要手段。
为什么用 Rust
Obscura 选择 Rust 有明确的设计理由:
- 内存安全:无 GC、无运行时开销,确保长时间运行的浏览器进程不会内存泄漏
- 性能:直接调用 V8 C API,不经过额外的语言桥接层
- 单二进制分发:静态编译,无运行时依赖
- 并发模型:tokio 异步运行时,适合高并发爬虫
何时选 Obscura
推荐使用 Obscura 的场景:
- 高密度网页抓取,需要大量并行实例
- AI Agent 浏览器自动化,需要快速启动和销毁
- 受限环境(Docker、CI/CD、边缘节点),二进制体积是关键约束
- 需要反检测能力的自动化任务
建议继续使用 Headless Chrome 的场景:
- 需要完整 Chrome DevTools 面板(Performance、Memory 分析)
- 依赖 Chrome 独有特性(如 Chrome Extensions 测试)
- 对渲染保真度要求极高,且不在乎资源消耗
判断原则很简单:如果你的工作以"读页面内容、跑 JS、抓数据"为主,Obscura 的轻量和隐蔽性是明确优势;如果你需要像素级渲染、DevTools 性能剖析或 Chrome 扩展生态,那 Chrome 仍是更稳妥的选择。
快速开始
下载并运行只需三步:
# 1. 下载(将 example.16yun.cn 替换为实际发布页地址)
curl -LO https://example.16yun.cn/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
# 2. 抓取
./obscura fetch https://example.com --dump markdown
# 3. 启动服务
./obscura serve --port 9222或者用 Docker:
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura总结
Obscura 不是一个功能完整的浏览器——它是一个专门为自动化场景优化的无头浏览器引擎。它的价值锚点很清晰:更小、更快、更隐蔽、更容易大规模部署。
后续文章会深入每一个核心能力:CLI 全命令详解、CDP 兼容性说明、Stealth 反检测原理、MCP 的 AI 集成、架构设计、生产部署、请求拦截、Rust 库集成和可靠性机制。
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。