🔒 Obscura:12k Stars 的 Rust 开源无头浏览器,30MB 内存替代 Puppeteer,专为 AI Agent 打造
项目地址:h4ckf0r0day/obscura | ⭐ 12,234 Stars | 🛠 Rust | 作者:h4ckf0r0day
老实说,搞 AI Agent 的都知道——浏览器自动化绕不开 Puppeteer 和 Playwright,但这俩都是为了人类浏览设计的。你让 Agent 操作浏览器,每次都要拉一个 200MB+ 的 Chrome 实例,启动 2 秒,加载 500ms……跑几百个并发直接内存爆炸。
昨天刚火的 Obscura 就是来解决这个问题的——一个用 Rust 写的无头浏览器引擎,30MB 内存、70MB 二进制、85ms 页面加载,开箱即用,完全兼容 CDP(Chrome DevTools Protocol),Puppeteer 和 Playwright 直接连上去就能用。
为什么要换掉 Chrome Headless?
对比很简单:Chrome Headless 启动 2 秒,加载 500ms,内存 200MB+。Obscura 启动瞬间,加载 51ms,内存 30MB。一个二进制搞定,不依赖 Chrome、Node.js、没有任何运行时。
对 AI Agent 来说,同一台机器上可以开几十倍多的并发爬虫。不是玩具,是真能顶上去的东西。
一行命令开始用
# Linux 直接下载
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
# 抓取页面标题
./obscura fetch https://example.com --eval "document.title"
# 抽取所有链接
./obscura fetch https://news.ycombinator.com --dump links
# 渲染 JS 后提取标题
./obscura fetch https://news.ycombinator.com --eval \
"Array.from(document.querySelectorAll('.titleline > a')).map(a => ({title: a.textContent, url: a.href}))"
Docker 一行:
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura
镜像基于 distroless/cc 多阶段构建,没有 shell、没有包管理器,压缩后约 57MB。
启动 CDP 服务,Puppeteer 直接连
obscura serve --port 9222 --stealth
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');
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 也支持,chromium.connectOverCDP() 直接连就行。
批量爬虫
obscura scrape url1 url2 url3 \
--concurrency 25 \
--eval "document.querySelector('h1').textContent" \
--format json
支持代理池:
obscura --proxy socks5://127.0.0.1:1080 scrape https://example.com https://news.ycombinator.com
最骚的:内置 MCP Server
Obscura 直接带 MCP 服务,Claude Desktop 或任何 MCP 客户端可以直接调用:
obscura mcp # stdio 模式
obscura mcp --http --port 8080 # HTTP 模式
Claude Desktop 配置:
{
"mcpServers": {
"obscura": {
"command": "obscura",
"args": ["mcp"]
}
}
}
内置的工具包括 browser_navigate、browser_snapshot、browser_click、browser_fill、browser_evaluate——AI Agent 直接通过 MCP 协议控制浏览器,零额外开发成本。
防检测模式
编译时加 --features stealth:
cargo build --release --features stealth
开启后:
navigator.webdriver 设为 undefined,跟真 Chrome 一模一样踩坑记录
obscura 和 obscura-worker 要放同目录:scrape 命令依赖 worker 进程,解压时别漏了