Obscura 是什么——开源无头浏览器引擎

Obscura 是一个用 Rust 编写的开源无头浏览器引擎,专为 AI Agent 自动化和网页抓取设计。30 MB 内存、85 ms 页面加载、内置反检测、CDP 协议兼容。

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

无头浏览器的新选择

做网页抓取和 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。

核心指标

指标ObscuraHeadless Chrome
运行时内存~30 MB200+ MB
二进制体积~70 MB300+ MB
页面加载(静态)~51 ms~500 ms
页面加载(JS+XHR)~84 ms~800 ms
冷启动瞬时~2 s
反检测能力内置 Stealth
Puppeteer 兼容是(CDP)
Playwright 兼容是(CDP)
许可证Apache 2.0BSD

基准测试数据和项目代码均开源在 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 9222

Puppeteer 侧:

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 mcp

Claude Desktop、Claude Code 或 Cursor 等 MCP 客户端可以直接调用 browser_navigatebrowser_clickbrowser_fillbrowser_snapshot 等浏览器工具。工具覆盖导航、读取、交互、等待、Cookie、标签页等类别,让大模型像调用函数一样驱动浏览器。

Stealth 反检测

Obscura 内置 Stealth 模式,用 --stealth 全局参数开启:

obscura fetch https://example.16yun.cn --stealth
obscura serve --stealth
obscura scrape url1 url2 --stealth
obscura mcp --stealth

Stealth 模式会做以下几件事:

  • TLS 指纹伪装:通过 wreq(BoringSSL)呈现真实 Chrome 的 ClientHello
  • 浏览器 Profile:内置一组真实浏览器 Profile(Windows 与 macOS 混合,近期 Chrome 版本),navigator.platformuserAgentData、UA、GPU renderer 之间内部一致
  • API 伪装navigator.webdriver = undefinedFunction.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 库集成和可靠性机制。

需要企业代理方案?

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