欣淇
发布于 2026-05-14 / 0 阅读
0
0

🔒 Obscura:12k Stars 的 Rust 开源无头浏览器,30MB 内存替代 Puppeteer,专为 AI Agent 打造

🔒 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_navigatebrowser_snapshotbrowser_clickbrowser_fillbrowser_evaluate——AI Agent 直接通过 MCP 协议控制浏览器,零额外开发成本。

防检测模式

编译时加 --features stealth

cargo build --release --features stealth

开启后:

  • 每次会话随机生成指纹(GPU、屏幕、Canvas、Audio、Battery)
  • navigator.webdriver 设为 undefined,跟真 Chrome 一模一样
  • 自动拦截 3,520 个追踪域名
  • 踩坑记录

  • 首次编译慢:V8 从源码编译约 5 分钟,之后缓存,第二次就快了
  • 部分 CDP 方法没实现:截屏、PDF 导出这些人类浏览场景没有,毕竟定位是 Agent 自动化
  • obscuraobscura-worker 要放同目录scrape 命令依赖 worker 进程,解压时别漏了
  • Linux 要求 glibc 2.35+:发布包基于 Ubuntu 22.04 构建,旧系统可能需要自己编译
  • 总结

  • 30MB 内存、70MB 二进制,比 Chrome Headless 省 6-10 倍资源
  • 完全兼容 CDP,Puppeteer / Playwright 直接连,现有代码零修改
  • 内置 MCP Server,AI Agent 零成本接入浏览器控制能力
  • 反指纹 + 追踪拦截,爬虫友好,不用额外工具链
  • 新项目但热度极高,2 天 12k Stars,社区活跃度说明一切

  • 评论