Obscura:30MB Rust 无头浏览器,AI Agent 与爬虫的隐形核武器
标签: 开源项目 / Rust / 无头浏览器 / AI Agent / 反爬
原文: 微信公众号「如此才是」https://mp.weixin.qq.com/s/NUEohrYRxKTb2QJ6eHQ-yg
GitHub: https://github.com/h4ckf0r0day/obscura
核心亮点
用纯 Rust 打造的轻量级无头浏览器引擎,专为 AI Agent 自动化和网页抓取设计。单二进制、无 Chrome、无 Node.js、无任何外部依赖,能真实运行 V8 JavaScript、完整支持 CDP,直接作为 Puppeteer 和 Playwright 的无缝替代品。
性能碾压 Chrome
| 指标 | Obscura | Chrome |
|---|---|---|
| 内存占用 | 30MB | 200MB+ |
| 二进制体积 | 70MB | 300MB+ |
| 页面加载 | 85ms | ~500ms |
| 启动速度 | 瞬时 | ~2s |
| 反检测 | 内置 + 3520 tracker 阻断 | 无 |
三大核心能力
1. CLI 命令行工具
# 单页抓取(支持真实 JS 渲染、自定义 eval、等待条件)
obscura fetch <URL> --dump html --wait-until networkidle0 --stealth
# 多 URL 并行抓取
obscura scrape <URL1> <URL2> --concurrency 10 --format json --stealth
# 启动 CDP WebSocket 服务器
obscura serve --port 9222 --stealth --proxy socks5://127.0.0.1:1080
2. Stealth Mode(反检测模式)
--stealth 或 cargo build --features stealth 开启:
- 指纹随机化:每次会话随机化 GPU、Screen、Canvas、Audio、Battery 指纹
- 真实 Chrome 模拟:navigator.userAgentData 使用 Chrome 145 高熵值;event.isTrusted=true;Function.prototype.toString() 返回 [native code];navigator.webdriver=undefined
- Tracker Blocking:自动阻断 3520 个 analytics/ads/telemetry/fingerprinting 域名
3. CDP 全兼容
直接用 Puppeteer-core 或 playwright-core 连接 ws://127.0.0.1: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://news.ycombinator.com');
已实现的 CDP Domain:Target、Page、Runtime、DOM、Network、Fetch、Storage、Input、LP(getMarkdown)
安装方法
预编译二进制(推荐)
# 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
# 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
从源码安装(含 Stealth)
git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
cargo build --release --features stealth
# 二进制在 target/release/obscura
要求:Rust 1.75+,首次构建约 5 分钟(V8 从源码编译,后续缓存)。
技术架构:6 个 Crate 极致模块化
| Crate | 职责 | 核心依赖 |
|---|---|---|
| obscura-dom | HTML/CSS/DOM 解析 | html5ever + selectors + cssparser(Servo 风格) |
| obscura-js | 真实 V8 JS 执行 | deno_core 0.350(直接嵌入 V8,非模拟) |
| obscura-net | 网络层 + tracker 阻断 | reqwest + wreq(stealth) |
| obscura-browser | 核心胶水层(Page/Context/Lifecycle) | 协调 DOM + JS + Net |
| obscura-cdp | Chrome DevTools Protocol | tokio-tungstenite WebSocket |
| obscura-cli | 命令行入口 | clap |
关键实现原理
- 真实 JS 执行:deno_core 直接嵌入 V8,无需完整 Chromium 渲染引擎 → 极低内存
- Stealth 实现:编译时 feature 切换,运行时 per-session 随机化 + 属性覆写 + 域名黑名单
- 性能极致:无 Blink、无桌面特性、纯 Rust 零成本抽象 + Tokio 异步 + Servo 解析器
- CDP 兼容:完全复用 Chrome 协议语义,Puppeteer/Playwright 零修改接入
实用功能
| 功能 | 参数 |
|---|---|
| 代理 | --proxy(HTTP/SOCKS5) |
| robots.txt | --obey-robots |
| 等待条件 | --wait-until(load/domcontentloaded/networkidle0) |
| 多进程并行 | --workers N |
| 表单/登录/302 | 原生支持(真实浏览器行为) |
| Cookie 维持 | 原生支持 |
| DOM 转 Markdown | CDP LP domain getMarkdown |
| 请求拦截 | Fetch domain continueRequest/fulfillRequest/failRequest |
Obscura vs Headless Chrome
| 维度 | Obscura | Headless Chrome |
|---|---|---|
| 体积 | 70MB | 300MB+ |
| 内存 | 30MB | 200MB+ |
| 启动 | 瞬时 | ~2s |
| 反检测 | 内置 Stealth + Tracker Block | 无,指纹明显 |
| JS 引擎 | 真实 V8(deno_core) | 真实 V8 |
| CDP 兼容 | 主要 Domain 已实现 | 完整 |
| Puppeteer/Playwright | 零修改接入 | 原生支持 |
适用场景
| 场景 | 说明 |
|---|---|
| AI Agent 自动化 | 轻量级浏览器后端,低资源高并发 |
| 大规模爬虫 | 并行抓取 + 反检测 + tracker 阻断 |
| 低资源环境 | 30MB 内存即可运行 |
| 反爬对抗 | Stealth Mode + 指纹随机化 |
写在最后
Obscura 用 Rust + deno_core + Servo 解析器的组合,把无头浏览器做到了极致轻量。30MB 内存、85ms 加载、内置反检测——这对 AI Agent 和大规模爬虫来说,是目前最务实的选择。
不过需要注意:CDP 并非 100% 覆盖 Chrome 全部 Domain,复杂场景(如高级渲染、WebGL)可能仍有差距。但作为抓取和自动化引擎,Obscura 已经足够强大。
本文整理自微信公众号「如此才是」,原文链接:https://mp.weixin.qq.com/s/NUEohrYRxKTb2QJ6eHQ-yg
GitHub 项目地址:https://github.com/h4ckf0r0day/obscura