Obscura:用 Rust 重写的无头浏览器,30MB 内存专为 AI Agent 与爬虫而生

做爬虫或 AI 智能体网页交互的开发者,大概都被 Headless Chrome 的“重”折磨过:单实例内存 200MB 起,冷启动要等两秒,部署镜像动辄 300MB,遇到反爬还得自己堆一堆隐身插件。最近 GitHub 上有个叫 Obscura 的开源项目,用 Rust 从头写了一个无头浏览器,专为 AI 代理和大规模网页抓取而生——上线五个月,星标已经冲到 2.6 万。

Obscura 是什么

Obscura 的官方定位很直白:“The headless browser for AI agents and web scraping.” 它用 Rust 编写,内嵌 V8 执行 JavaScript,不依赖 Chromium、也不依赖 Node.js,打包成单个约 70MB 的二进制文件就能跑。

几个关键事实(GitHub 实时数据,2026 年 9 月 8 日):

  • 仓库 h4ckf0r0day/obscura,创建于 2026 年 4 月 13 日
  • 26,399 stars / 1,921 forks,累计 1000+ 次提交,PR 已排到 #871
  • 最新版 v0.2.2(2026 年 9 月 5 日发布),提供 Linux / macOS / Windows 三平台预编译包
  • 许可证 Apache-2.0,无功能阉割、无付费墙

性能差距有多大

官方给出的对比数据(vs Headless Chrome):

指标 Obscura Headless Chrome
内存占用 约 30 MB 200 MB 以上
二进制/安装包 约 70 MB(Docker 镜像压缩后约 57 MB) 300 MB 以上
页面加载 约 85 ms 约 500 ms
启动 近乎瞬时 约 2 秒

第三方在生产 VPS 上的实测峰值内存约 34MB,与官方口径基本吻合。对单机跑几百并发的抓取集群来说,这个差距直接换算成服务器账单。

五个值得关注的能力

1. 不启动 Chromium 也能截图、出 PDF

Obscura 自研了 CSS 布局与绘制引擎(覆盖 block、flex、grid、float、transform 等常见路径),直接完成光栅化与分页排版,输出 PNG 截图、PDF 导出,还能通过 CDP 推实时录屏流。

2. CDP 全兼容,现有脚本零改动迁移

它在 Rust 层实现了 Chrome DevTools Protocol 的常用域(Target、Page、Runtime、DOM、Network、Fetch、IO 等)。Puppeteer 和 Playwright 的脚本只需要把连接地址换掉:

// Puppeteer
await puppeteer.connect({ browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser' })

// Playwright
await chromium.connectOverCDP({ endpointURL: 'ws://127.0.0.1:9222' })

页面跳转、元素点击、表单填写、网络拦截、Cookie 管理这些常用操作都能直接跑。

3. 内置 MCP 服务器,AI 直接开浏览器

obscura mcp                      # stdio 模式
obscura mcp --http --port 8080   # HTTP 模式,端点 http://127.0.0.1:8080/mcp

在 Claude Desktop 里加一段配置即可接入:

{ "mcpServers": { "obscura": { "command": "obscura", "args": ["mcp"] } } }

它暴露 browser_navigatebrowser_snapshotbrowser_screenshotbrowser_clickbrowser_fillbrowser_evaluate 等工具,还内置 DOM 转 Markdown(CDP 域里的 LP.getMarkdown),把页面一键转成对大模型友好的结构化文本,省掉自己写解析的功夫。

4. 开箱即用的隐身反检测

加上 --stealth 后,会按会话随机化 GPU、屏幕、Canvas、Audio、Battery 等指纹,隐藏 navigator.webdriver 标识并做原生函数掩码,同时内置拦截约 3520 个追踪与广告域名。不用再额外集成 puppeteer-extra-plugin-stealth 这类插件。(注意:stealth 构建需要单独下载对应的预编译包,或从源码带 feature 编译。)

5. 默认就把安全门关上

默认阻止对私有/内网 IP 的请求(含 DNS 解析阶段的检查,防 SSRF);V8 带 watchdog、CLI 有截止时间、panic 安全;Docker 镜像基于 distroless、无 shell,以 uid 65532 非 root 运行。

快速上手

安装

# 预编译二进制(Linux x86_64)
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz

# Docker
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura

# Arch Linux (AUR):yay -S obscura-browser
# NixOS:nix-env -iA nixpkgs.obscura

源码编译需 Rust 1.75+,首次构建约 5 分钟(要编 V8);可按需开关 renderstealth feature。

四种用法

# 单页抓取:取标题 / 导出文本 / 截图
obscura fetch https://example.com --eval "document.title"
obscura fetch https://example.com --dump text
obscura fetch https://example.com --screenshot page.png

# 批量并行抓取(并发 25,JSON 输出)
obscura scrape url1 url2 url3 --concurrency 25 --format json

# 启动 CDP 服务,让现有 Puppeteer/Playwright 脚本接入
obscura serve --port 9222 --stealth

# 起 MCP 服务器,接 Claude / Cursor
obscura mcp

抓包时想走代理,加 --proxy socks5://127.0.0.1:1080 即可,HTTP 和 SOCKS5 都支持。

架构一瞥

Obscura 由约 8 个 Rust crate 组成:CDP 服务器按 session ID 分发 WebSocket 帧,调度器调用页面导航处理器,再向下并行分发到三个底层包——HTTP 抓取、HTML 解析、V8 执行。所有页面共享一个单线程 V8 isolate,这正是它把内存压到 30MB 量级的关键机制。

适合谁 / 不适合谁

适合的场景:高并发爬虫与数据采集集群、给 AI Agent 配一个低成本的网页运行时、CI 里的端到端浏览器测试、对反爬较严格站点的受控采集。

暂时不适合的场景:需要完整 WebGL、视频播放等复杂多媒体渲染的任务;对浏览器底层指纹有高度定制需求的风控对抗;依赖 Chrome 特有扩展生态的场合。

另外值得一提的是,据 Cloudflare 工程博客的介绍,其 agent-first 浏览器 Kitesurf 在立项时“从 Obscura 获得了最初的灵感”,并借助 AI 智能体把它移植到 Cloudflare Workers 上。一个诞生五个月的 Rust 项目能对一线基础设施厂商的浏览器策略产生影响,说明“为 Agent 重新设计浏览器”这个判断正在成为行业共识。官方还在规划托管云服务 Obscura Cloud,不想自建服务的开发者可以留意。

相关链接

本文数据来自 GitHub 仓库与官方 README,星标与版本信息核对于 2026 年 9 月 8 日,项目迭代很快,具体以仓库最新状态为准。

腾讯云精选福利

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注