Obscura 是一款用 Rust 编写的开源无头浏览器引擎,定位为面向 AI 智能体与网页抓取的无头浏览器。项目采用 Apache-2.0 许可,官方强调开源引擎功能完整、不做功能限制。
用途 Obscura 主要用于网页抓取与 AI 智能体自动化。它通过 Chrome DevTools Protocol(CDP)实现,可作为无头 Chrome 的替代品,兼容 Puppeteer 与 Playwright。它直接嵌入 V8 引擎来运行真实 JavaScript,并支持原生渲染,无需 Chromium。
主要能力
- 原生渲染:可截图、对实时页面进行录屏(screencast),并直接导出 PDF。
- 兼容性:实现 Chrome DevTools Protocol,支持 Puppeteer 与 Playwright;提供 MCP(Model Context Protocol)服务器,向 AI 智能体(如 Claude Desktop、Cursor 等)暴露浏览器自动化工具。
- 隐身模式:通过构建时启用 --features render,stealth,并在运行时使用全局 --stealth 标志开启。隐身构建包含完整渲染引擎,开启隐身不会移除截图、录屏、PDF、CDP 或 MCP 功能。
- 反指纹:按会话随机化指纹(GPU、屏幕、canvas、音频、电池);提供真实的 navigator.userAgentData(Chrome 145,高熵值);派发事件的 event.isTrusted = true;隐藏内部属性(Object.keys(window) 安全);原生函数掩码(Function.prototype.toString() → [native code]);navigator.webdriver = undefined(与真实 Chrome 一致)。
- 追踪器拦截:拦截 3,520 个域名,阻止分析、广告、遥测与指纹脚本加载,随 --stealth 自动启用。
- 并行抓取:提供 obscura scrape 命令,使用 worker 进程并行抓取多个 URL;多 worker 模式下退出的子进程会被回收并重启,新连接仅使用就绪 worker,若无就绪 worker 则负载均衡器返回 HTTP 503。
- 资源流式读取:可通过 Fetch.takeResponseBodyAsStream 配合 IO.read / IO.close 分块读取大资源;超过缓存上限(OBSCURA_NETWORK_BODY_BUFFER_BYTES,默认 2 MiB)的响应体不会被保留,需要流式下载大文件时应提高该上限。
- V8 标志:可用 --v8-flags 向 V8 传递原始标志,语法与 Chromium 的 --js-flags 及 Node 命令行标志相同,常用于提高堆上限以解决 JS 堆内存不足。
- 超时控制:页面脚本执行阶段默认预算为 30 秒,可用 OBSCURA_SCRIPT_DEADLINE_MS 调整;增强已渲染页面的模块有独立的每模块 3 秒预算;OBSCURA_FETCH_TIMEOUT_MS 控制模块的网络请求而非求值时间。
使用方式
- 获取二进制:从 Releases 下载最新二进制,无需 Chrome、Node.js 或依赖。发布归档包含 obscura 与 obscura-worker,并行抓取命令需将二者放在同一目录。Linux 发布构建面向 Ubuntu 22.04,可在 glibc 2.35+ 的常见 LTS 服务器上使用。
- Docker:镜像位于 Docker Hub,基于 distroless/cc:nonroot 多阶段构建,无 shell、无包管理器,以 uid 65532 运行,压缩后约 57 MB。挂载的 --storage-dir 必须对 uid 65532 可写。发布到主机回环地址时,-p 9222:9222 会在所有接口暴露端口。
- 从源码构建:需要 Rust 1.75+(rustup.rs)。首次构建约 5 分钟(V8 从源码编译,之后缓存)。隐身构建还会编译 BoringSSL 并生成绑定,因此需要 CMake、Clang 以及 libclang/LLVM 开发库。渲染构建使用 rustls;渲染加隐身构建使用 wreq/BoringSSL,因此需要上述额外构建工具。
- 启动 CDP 服务器:可启动 CDP WebSocket 服务器。
- 命令行:obscura fetch <URL> 抓取并渲染单个页面;obscura scrape <URL...> 使用 worker 进程并行抓取多个 URL。
- MCP 服务器:提供 stdio(默认,适用于 Claude Desktop 等启动子进程的客户端)与 HTTP(适用于通过网络连接的客户端)两种传输方式,并支持可选标志。MCP 服务器暴露静态图像与 PDF 输出;需要流式 Page.startScreencast 协议时应使用 CDP。
- Hermes 智能体插件:可在 Obscura 上运行 Hermes 智能体浏览器任务,插件按会话启动 obscura serve(或连接已运行的服务器)并通过 CDP 驱动,可选 --stealth。
适用场景 适用于网页抓取、AI 智能体浏览器自动化、需要 Puppeteer/Playwright 兼容性的场景,以及需要隐身与反指纹、追踪器拦截的采集任务。
限制 官方说明当前实现覆盖 block、inline、flex、grid、table、float、positioning、overflow、transform、text、image、SVG、canvas、background、border 与 animation 路径,但仍是一个持续演进的独立引擎:长尾 CSS、部分 Web API、媒体播放、合成器效果与平台字体光栅化可能与 Chromium 存在差异。Puppeteer、Playwright 与 MCP 指南中说明了各自的捕获 API 与限制。
其他信息 官方正在开发 Obscura Cloud 托管版本,提供托管基础设施、住宅代理与专属支持,可加入等待列表或预约演示。开源引擎保持 Apache-2.0 且功能完整。项目由支持独立开源浏览器基础设施的组织提供支持,赞助可联系 hello@obscura.sh。完整基准测试套件(WPT 一致性、障碍赛道、真实世界语料库及与 Chrome 的速度对比)位于独立仓库 https://github.com/h4ckf0r0day/obscura-benchmark。环境变量完整允许/拒绝规则(含 DNS 解析时检查)见 docs/Environment-variables.md。