
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.isTrusted为true - 隐藏内部属性,
Object.keys(window)保持干净 - 原生函数遮蔽,
Function.prototype.toString()返回[native code] navigator.webdriver为undefined,与真实 Chrome 一致
指纹随机化在反检测之外的另一面是隐私保护:每个会话不留下可供长期关联的固定特征。启用 stealth 不会削减其他能力,截图、录屏、PDF、CDP 与 MCP 功能均保留。
跟踪器屏蔽
Stealth 模式下自动拦截 3,520 个域名,覆盖分析、广告、遥测与指纹脚本,且是在加载阶段直接阻止,而非事后清理。对抓取任务来说,这同时意味着更少的请求和更快的加载。
性能数据
官方给出的对比数据如下:
| 指标 | Obscura | 无头 Chrome |
| 内存 | 30 MB | 200 MB 以上 |
| 二进制体积 | 70 MB | 300 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-core 或 playwright-core 连接即可复用既有脚本。
面向 AI Agent,项目内置 MCP 服务器,暴露 browser_navigate、browser_snapshot、browser_screenshot、browser_pdf、browser_click、browser_fill、browser_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 手动解压。发布包内含 obscura 与 obscura-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




