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。
关键数字:
| 指标 | Obscura | Headless Chrome |
|---|---|---|
| 内存占用 | 30MB | 200+ MB |
| 二进制大小 | 70MB | 300+ 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 的引擎”。
三种上手方式
- MCP 方式:
obscura-mcp。做 AI Agent 的话,直接把它接进工具链,它自己就是协议端,不用写对接层。 - 替换 Puppeteer/Playwright:连接地址指向 Obscura,代码几乎不动。
- 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