编程 Chromium 装到崩溃?一个内存只要 30MB 的 Rust 浏览器,还兼容 Puppeteer

2026-09-01 18:39:12

Chromium 装到崩溃?一个内存只要 30MB 的 Rust 浏览器,还兼容 Puppeteer

部署爬虫,第一步就卡住:装 Chromium。

本地能跑的脚本,一上服务器就崩。libnss3、libatk、libdrm,逐个报错,缺哪个都起不来。换 Docker 解决——镜像打包 1GB,构建十分钟,CI 里跑一次等到怀疑人生。

问题不在操作,在架构:一个 Headless 浏览器,凭什么要拖几百 MB 的完整内核?

Headless Chrome 的重量来自冗余

Headless Chrome 不是“去掉界面的 Chrome”。它还是完整的 Chromium:Blink 渲染引擎、V8 JavaScript 引擎、Skia 图形库、几百个 Web 平台特性、完整开发者工具。这些是为“一个正常用户用的浏览器”准备的。

但 Headless 场景只需要四件事:执行 JavaScript、渲染页面、截图、导出 PDF。

地址栏、书签、DevTools、历史兼容——这些用不上的功能,体积和内存一点没少算。瓶颈不在功能,在冗余。

Obscura:Rust 写的 Headless 引擎

Obscura 是一个 Rust 写的 Headless 浏览器引擎,不依赖 Chromium。设计目标很直接:headless Chrome 的 drop-in replacement。

关键数字:

指标ObscuraHeadless Chrome
内存占用30MB200+ MB
二进制大小70MB300+ MB
页面加载85ms~500ms
启动速度近即时~2s
反检测内置
Puppeteer支持支持
Playwright支持支持

一个容易看岔的点值得单独说:30MB 是运行时内存,不是安装包大小。二进制实际是 70MB——比 Chromium 的 300MB+ 小很多,但不是“只有 30MB”。30MB 的优势体现在内存占用,别误读成体积。

实现上,Obscura 用 Rust 写引擎,用 V8 跑真实 JavaScript,走 Chrome DevTools Protocol。核心能力保留,多余的整个砍掉。

兼容 Puppeteer/Playwright 是核心设计

很多轻量浏览器项目不是做得不好,是死于生态兼容。爬虫用了 Puppeteer,新浏览器不支持,得重写;Agent 工作流用了 Playwright,新浏览器不支持,得适配。这一关劝退多数人。

Obscura 把兼容做成核心设计。现有 Puppeteer/Playwright 脚本,复制过来改个连接地址,基本就能跑。不用重写,不用适配。

这是它区别于其他轻量方案的关键:不是“另一个浏览器”,而是“能替换 Chrome 的引擎”。

三种上手方式

  1. MCP 方式obscura-mcp。做 AI Agent 的话,直接把它接进工具链,它自己就是协议端,不用写对接层。
  2. 替换 Puppeteer/Playwright:连接地址指向 Obscura,代码几乎不动。
  3. CLI 方式:截图、录屏、导出 PDF,命令行直接完成。

三种方式的共同特点是:不需要安装 Chromium 那套系统依赖链——这正是开头那个 1GB Docker 镜像要解决、而 Obscura 在架构上避开的问题。

另外几个要点:

  • 内置反检测。Chromium 的 headless 指纹很好认,反爬一抓一个准。Obscura 把规避做进了引擎,不是外挂插件。
  • 截图、录屏、PDF 原生支持。Agent 工作流里最常用的三件事,不用额外装东西。
  • Cloudflare 参考了它的设计。README 提到,Cloudflare 做 agent-first 浏览器 Kitesurf 时,原型从 Obscura 移植起步。这算是外部验证。
  • 开源,Apache-2.0。引擎完全开源。团队商业化的部分是 Obscura Cloud 托管版。

适用与不适用

适用:爬虫、AI Agent、CI/CD、服务器自动化。容器里塞 70MB 的浏览器,比塞 300MB 的 Chromium 划算得多;不用在服务器上装一墙系统依赖,部署链路短一截。

不适用:普通用户上网——它没有界面,是引擎,不是浏览器;复杂页面——生态刚起步,冷门 API 和浏览器特性不一定完整覆盖,有踩坑风险。

判断与局限

三个点需要明确标注:

第一,它的优势来自砍功能,不是加了功能。 Headless 场景对浏览器的需求本来就是四件事:JS、渲染、截图、PDF。Chromium 的几百 MB 是在为不需要的功能付费。Obscura 的取舍是保留 V8 + CDP,砍掉界面层和用不上的 Web 特性。这个方向是对的,但意味着它天然不适合功能完整度要求高的场景。

第二,兼容性还没有被大规模验证。 兼容 Puppeteer/Playwright 是设计目标,但“兼容”不等于“全部 API 都覆盖”。冷门接口、边缘行为、复杂页面渲染,都可能出问题。生产环境用之前,先拿自己的真实脚本跑一遍。

第三,本文基于轻量试用和文档层面的验证。 我没有做高并发、上千页面的大规模压测,这部分缺乏真实数据背书。如果你考虑上生产,建议先压一轮自己的 workload。

结论

对爬虫、AI Agent、CI、服务器自动化这几类场景,Obscura 是目前轻量级 Headless 方案里完成度较高的一个:30MB 内存、70MB 二进制、兼容 Puppeteer/Playwright、内置反检测。

验证成本很低:找一个现成的 Puppeteer 脚本,改个连接地址,看能不能跑。能跑,省掉的是 Chromium 全家桶的部署和维护成本;不能跑,再等它迭代。

项目地址:https://github.com/h4ckf0r0day/obscura
文档:docs.obscura.sh

推荐文章

程序员茄子在线接单