Obscura — Rust 无头浏览器引擎,30MB 内存替代无头 Chrome

Obscura 是一个用 Rust 编写的开源无头浏览器引擎,可作为无头 Chrome 的浏览器工具替代品直接接入 Puppeteer 和 Playwright——不需要装 Chrome,也不需要 Node.js 运行时,一个二进制文件就能跑起来。它通过内置的 V 8 执行真实 JavaScript,并支持 Chrome DevTools Protocol。

作为专注网页浏览自动化的引擎,它在GitHub精选这类基础设施项目中属于少见的路线:自带渲染,不依赖 Chromium,却能输出截图、录屏和 PDF。项目以 Apache-2.0 协议发布,官方承诺开源引擎不做功能阉割。

场景痛点

跑批量抓取的开发者工具时,最常见的开销不在爬虫逻辑,而在浏览器本身。每个 Chrome 实例都要吃掉数百 MB 内存,冷启动动辄几秒,跑上千个会话时账单和失败率一起往上走。更麻烦的是无头 Chrome 的指纹特征过于明显,navigator.webdriver、WebGL 与 canvas 的一致性、缺失的 userAgentData 高熵值,都会被站点一侧的检测脚本识别出来。

翻遍常见的工具推荐软件发现清单,能把内存、启动速度和指纹这三项一起解决掉的方案并不多。为自动化任务准备一台浏览器,往往意味着要在多个组件之间反复取舍。

核心功能

原生渲染,不依赖 Chromium

Obscura 自带渲染引擎,提供 CSS 布局与绘制、视口与整页截图、滚动感知的 fixed 与 sticky 几何、活动驱动的 CDP 录屏,以及栅格化 PDF 导出——全程不启动 Chromium。当前实现覆盖 block、inline、flex、grid、table、float、定位、overflow、transform、文本、图像、SVG、canvas、背景、边框与动画等路径。

实用软件来说,摆脱 Chromium 依赖最直接的收益是部署简化:不需要再为镜像塞进几百 MB 的浏览器运行时。

官方也明确了边界:它仍是独立演进中的引擎,长尾 CSS、部分 Web API、媒体播放、合成器效果以及平台字体光栅化可能与 Chromium 存在差异。

Stealth 模式:每会话随机指纹

构建时带上 render,stealth 特性,运行时加全局 --stealth 标志即可启用。反指纹部分包含:

  • 每会话指纹随机化,覆盖 GPU、屏幕、canvas、音频与电池状态
  • 真实的 navigator.userAgentData(Chrome 145 高熵值)
  • 派发事件的 event.isTrustedtrue
  • 隐藏内部属性,Object.keys(window) 保持干净
  • 原生函数遮蔽,Function.prototype.toString() 返回 [native code]
  • navigator.webdriverundefined,与真实 Chrome 一致

指纹随机化在反检测之外的另一面是隐私保护:每个会话不留下可供长期关联的固定特征。启用 stealth 不会削减其他能力,截图、录屏、PDF、CDP 与 MCP 功能均保留。

跟踪器屏蔽

Stealth 模式下自动拦截 3,520 个域名,覆盖分析、广告、遥测与指纹脚本,且是在加载阶段直接阻止,而非事后清理。对抓取任务来说,这同时意味着更少的请求和更快的加载。

性能数据

官方给出的对比数据如下:

指标Obscura无头 Chrome
内存30 MB200 MB 以上
二进制体积70 MB300 MB 以上
反检测内置
页面加载85 ms约 500 ms
启动即时约 2 秒
Puppeteer / Playwright支持支持

分场景的页面加载基准:静态 HTML 为 51 ms(Chrome 约 500 ms),含 XHR 与 fetch 的 JavaScript 页面为 84 ms(约 800 ms),动态脚本页面为 78 ms(约 700 ms)。

CDP 兼容与 AI Agent 接入

Obscura 实现了 CDP 的 Target、Page、Runtime、DOM、Network、Fetch、IO、Storage、Input 等域,并额外提供 LP.getMarkdown 做 DOM 转 Markdown。启动服务后,Puppeteer 与 Playwright 通过 puppeteer-coreplaywright-core 连接即可复用既有脚本。

面向 AI Agent,项目内置 MCP 服务器,暴露 browser_navigatebrowser_snapshotbrowser_screenshotbrowser_pdfbrowser_clickbrowser_fillbrowser_evaluate 等 14 个工具,支持 stdio 与 HTTP 两种传输方式,可直接配置进 Claude Desktop 之类的客户端,把浏览器操作纳入 AI自动化流程。

抓取与并行

单页抓取用 fetch,支持按 --dump 输出 HTML、文本、链接、Markdown、资源清单或原始响应体,也可用 --eval 直接执行 JavaScript 取值。批量场景用 scrape,通过 --concurrency 控制并行 worker 数量,配合 --eval--format json 输出结果。

安装与使用

下面的使用教程覆盖从下载到并行抓取的完整路径。

前置条件

运行时无需 Chrome、Node.js 或额外依赖。Linux 发布版针对 Ubuntu 22.04 构建,需要 glibc 2.35 及以上。若从源码构建,需要 Rust 1.75 及以上,首次构建约 5 分钟(V 8 需从源码编译,之后有缓存);构建 stealth 版本还需 CMake、Clang 与 libclang/LLVM 开发库。

安装

GitHub Releases 页面下载对应平台的压缩包即可:

Windows 用户从 Releases 下载 .zip 手动解压。发布包内含 obscuraobscura-worker 两个文件,需放在同一目录,并行 scrape 命令依赖后者。

归档包后缀对应不同的构建组合:

后缀渲染Stealth 传输
无后缀支持不支持
-stealth支持支持
-no-render不支持不支持
-no-render-stealth不支持支持

需要长期驻留时,Docker 是最省事的系统级部署方式:

镜像基于 distroless/cc 多阶段构建,不含 shell 与包管理器,压缩后约 57 MB。

日常使用

常用参数建议:

场景推荐参数说明
动态 SPA 页面--wait-until networkidle0等待网络空闲后再取值
慢速或异常页面--timeout 10限制导航时间,单位为秒
本地开发服务器--allow-private-network默认阻止私有网段访问,需显式放行
图片或二进制资源--dump original绕过 JavaScript 与 DOM 层,流式输出原始响应体
大文件下载Fetch.takeResponseBodyAsStream + IO.read超过 2 MiB 缓存上限的响应体不会保留

环境变量调优

JavaScript 密集型页面可能触发堆内存上限,可通过 --v8-flags 直接透传 V 8 参数:

页面脚本执行阶段的默认预算为 30 秒,非关键模块的单模块预算为 3 秒。重型 SPA 在慢网络下启动较慢时,可调高 OBSCURA_SCRIPT_DEADLINE_MS;Vite HMR 客户端这类长驻模块则调高 OBSCURA_MODULE_BUDGET_MS

使用边界与合规提醒

Obscura 的反指纹与跟踪器屏蔽能力面向自动化测试、网页抓取与 Agent 任务设计,使用时应遵守目标站点的 robots.txt 与服务条款,并符合所在地法律法规。项目本身提供了两项约束能力:obscura serve 支持 --obey-robots 标志以遵循 robots.txt(默认关闭);同时默认阻止对私有与内网 IP 的访问以防 SSRF,指向本地开发服务器时需显式传入 --allow-private-network 或设置 OBSCURA_ALLOW_PRIVATE_NETWORK=1

在授权范围外的站点上使用指纹伪装能力,可能违反服务条款或相关法律规定,这类风险由使用者自行承担。

我的使用感受

把 Obscura 当作效率工具来看,它解决的是工程成本问题:省掉 Chromium 依赖后,部署包体积和常驻内存都降了一个量级,容器环境下尤其明显。对已有 Puppeteer 脚本的团队,迁移成本主要在改一行连接地址。

需要留意的是,它的渲染引擎仍在演进,长尾 CSS 与媒体播放等场景可能与 Chromium 不一致,正式切换前建议先用自己的目标页面做一轮比对。另外 stealth 构建依赖 CMake 与 Clang,自行编译时环境准备要多花些时间。

官方网站

https://github.com/h4ckf0r0day/obscura

下载地址

https://pan.quark.cn/s/446150236cda

相关推荐

Avatar photo

JameCling

我是 格律诗的软件世界 的作者,一名专注于软件工具、AI 技术和数字效率领域的独立研究者。
多年来,我持续关注互联网工具的发展趋势,体验不同平台的软件产品,并研究它们如何帮助用户提升效率。
我的工作不仅是整理软件信息,而是通过实际测试、功能分析和使用场景研究,帮助用户判断一个工具是否真正值得使用。
格律诗的软件世界 的每一篇文章都希望提供真实、有价值的信息,包括工具特点、使用方法、优缺点分析以及适合的人群。
我相信,好的工具能够改变工作方式,而准确的信息能够帮助用户做出更好的选择。