obscura
h4ckf0r0day/obscura加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图:Obscura 项目官方 Banner——一个把「浏览器」从 Chromium 依赖中解放出来的 Rust 引擎
想象一个典型的 AI Agent 场景:模型需要访问一个动态网页,读懂页面上的价格、库存、公告,再把结论写进日报。用 Playwright + Chromium 是标准答案,但你很快会发现问题——服务器上每个浏览器实例吃 200MB 以上内存,容器镜像动辄 1.5GB,冷启动要两秒;如果要并发 50 个抓取任务,机器直接被拖垮。更麻烦的是,遇到有反爬检测的站点,navigator.webdriver = true 就像在额头贴了张纸条。
Obscura 就是从这个痛点里长出来的:一个用 Rust 从零写的无头浏览器引擎,内存占用 30MB、二进制约 70MiB、页面加载 85ms、启动瞬间完成,而且反检测是内置能力而非外挂。它不是「更轻的 Chromium 包装」,而是自带 HTML 解析、DOM 树、V8 运行时、CSS 布局与 CPU 光栅化渲染管线的完整引擎。
浏览器基础设施长期被 Chromium 的庞大生态绑架。Chromium 是事实标准,但它的体积、启动开销和 CDP 进程模型,对「大量并发、密集调度」的 Agent 抓取场景并不友好。
Obscura 由 h4ckf0r0day 于 2026 年 4 月创建,主语言 Rust,Apache-2.0 协议。项目演进速度相当激进:仓库只有半年历史,已经积累近 3 万 Star、2250 个 Fork、93 位贡献者,发布节奏到了 v0.2.5。最有说服力的背书来自 Cloudflare——其工程师在开发面向 Agent 的浏览器产品 Kitesurf 时,直接把 Obscura 移植到了 Workers 平台,作为第一个原型起点。
技术选型也解释了一切:HTML5ever/Markup5ever 做 HTML5 解析,deno_core 嵌入 V8 跑真实 JavaScript,Taffy 提供 flex/grid 布局骨架,tiny-skia 与 ab_glyph 完成纯 CPU 2D 光栅化与字形渲染,tokio-tungstenite 承载 CDP WebSocket 通信。整条链路没有任何 Node.js 或 Python 依赖。
如果把 Chromium 比作一辆量产轿车,Obscura 更像一辆手工组装的轻量赛车:
它保留了真正有用的部分:完整的 JavaScript 执行、真实 DOM、Cookie 会话、表单提交与 302 跳转、截图、PDF 导出、CDP 协议兼容。剥掉的是 WebGL/媒体解码/平台字体光栅这类"跑得快但用不上"的重型部件。

图:项目图标,一个低调的深色符号——正符合它"隐身浏览器"的定位
1. CLI 抓取 一条命令完成取页、跑 JS、抽取、截图:
obscura fetch https://example.com --eval "document.title"
obscura fetch https://example.com --screenshot page.png
obscura fetch https://example.com --dump assets --timeout 10
还有并行批量模式 obscura scrape url1 url2 --concurrency 25 --format json,单次抓取进程级硬超时兜底。
2. CDP 服务(obscura serve --port 9222)
对 Puppeteer / Playwright 完全兼容,是无头 Chrome 的直接替代品。已实现的 CDP 域覆盖 Target、Page、Runtime、DOM、Network、Fetch(含实时请求拦截与 fulfill)、IO 流式读取、Storage、Input,还扩展了 LP.getMarkdown 做 DOM→Markdown 转换。
3. MCP 服务(obscura mcp)
为 AI Agent 准备的核心入口,暴露 12 个浏览器工具:browser_navigate、browser_snapshot、browser_click、browser_fill、browser_type、browser_evaluate、browser_wait_for 等。支持 stdio 与 HTTP 两种传输,HTTP 模式强制 Bearer 认证(token 至少 32 字节)并带 Origin 白名单,是给 Claude Code / Cursor / Aider 这类 MCP 客户端直接对接的。
4. Rust 库
obscura crate 可嵌入 Rust 服务,提供 Browser / Page / Element / CookieStore 原生 API,无需 CDP 往返。
**隐身模式(--stealth)**是差异化重点:每会话随机化 GPU/屏幕/canvas/音频/电池指纹,伪造高熵 navigator.userAgentData(Chrome 145),navigator.webdriver = false,Function.prototype.toString() 返回 [native code],并内置 3520 个追踪器域名黑名单。
| 路径 | 门槛 | 适合谁 |
|---|---|---|
| Release 二进制 | 最低。curl -LO .../obscura-x86_64-linux.tar.gz 解压即用,零依赖 | 想快速试用的开发者 |
| Docker | 低。docker run -d -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura,多阶段构建落在 distroless/cc:nonroot,无 shell、无包管理器、uid 65532,压缩后约 57MB | 容器化部署、CI |
| 源码编译 | 中。需 Rust 1.75+,首次构建约 5 分钟(V8 从源码编译);开 stealth 还需 CMake/Clang/libclang-dev/llvm-dev | 需要定制或嵌库的团队 |
接入侧零成本:Node 端 puppeteer-core / playwright-core 直连 ws://127.0.0.1:9222,Python、Ruby 同样走 CDP 标准协议。
Obscura 自己也把"哪里不行"写进了文档,这份诚实反而值得肯定:
srcdoc 使用原生子 realm,但子帧 CDP 求值路由与内容合成仍是兼容性缺口——不意味着支持 Playwright frame locator 或 iframe 截图保真。v8_lock,理论上存在多页面并发时的争用。--allow-private-network。MCP HTTP 模式暴露的是特权浏览器会话,token 配错等于把浏览器敞开门。Obscura 折射的是一个清晰的趋势:AI Agent 的爆发,正在把浏览器从"人机界面"重新定义成"Agent 的工具调用层"。当模型需要高频、低成本、可并发地读网页,"启动一个完整浏览器"的成本模型就撑不住了。
Rust 重写 + 纯 Rust 渲染管线(不依赖 Skia/Chromium 的 GPU 光栅化)+ V8 保留 + CDP 兼容,这套组合精准命中了 Agent 基础设施的真实痛点。Cloudflare 的 Kitesurf 把它搬到 Workers 上,也说明这个方向不只停留在玩具阶段——浏览器正在变成 Serverless 平台的原生计算单元。
对国内团队而言,它的价值同样具体:单台 2C8G 机器可以跑起几十上百个并发抓取上下文,内存占用是 Chromium 方案的十五分之一;国产化环境里少一个 Chromium 依赖链,也少一堆版本适配和合规负担。
结论:Obscura 不是「又一个 headless browser 包装」,而是第一次用 Rust 把浏览器引擎真正拆开重做,并证明渲染、隐身、CDP、MCP 四条路径可以共存于一个 70MiB 的二进制里。适合做 Agent 浏览器工具层、爬虫基础设施与轻量抓取节点;如果你依赖复杂的 Chromium 专有特性,则应先在真实目标站点上做一轮兼容性验证。