乐于分享
好东西不私藏

Hermes、OpenClaw最佳搭档的浏览器,专为 AI Agent 而生

Hermes、OpenClaw最佳搭档的浏览器,专为 AI Agent 而生

上周我让 Hermes 帮我抓一个电商页面的价格,结果 Puppeteer 启动了两秒,加载页面又花了半秒,吃掉 200 多 MB 内存,最后还被网站的反爬机制给拦了。说实话,那一刻我是真的有点崩溃——我只是想读个价格而已,就这么难?

然后我就刷到了 Obscura。

Headless Chrome 的老毛病

做过 AI Agent 的人都知道,Agent 需要上网。不管是搜资料、抓数据、还是自动填表,都得靠一个无头浏览器在后台跑。这几年大家用的最多的就是 Puppeteer 和 Playwright,底下跑的都是 Headless Chrome。

问题在哪呢?太重了。

一个 Chrome 实例,启动要两秒,内存随随便便吃 200MB 以上,二进制包 300MB 起步。你要是同时开五六个页面做并发抓取,一台 2GB 内存的 VPS,直接就撑不住了。更别提那些反爬严格的网站,Chrome 的指纹特征一抓一个准,stealth 插件装了一堆,还是被拦。

说白了,Puppeteer 和 Playwright,是给前端测试设计的,不是给 AI Agent 设计的。Agent 需要的是轻量、快速、能隐身,而这三样,Chrome 一样都不擅长。

Obscura 是什么

Obscura 是一个用 Rust 写的无头浏览器引擎,专门为 AI Agent 和网页爬虫打造。它不用 Chromium,不用 Node.js,自己从头实现了一套浏览器内核,跑的是真正的 V8 JavaScript 引擎。说实话,第一次看到这个项目的时候,我心里是打了个问号的——Rust 写浏览器?能用吗?

几个核心数据,直接上对比:

指标 Obscura Headless Chrome
运行内存 30MB 200MB+
二进制大小 70MB 300MB+
页面加载 85ms ~500ms
启动速度 瞬间 ~2秒
反检测 内置

光看数字可能没感觉,我换个说法:同样一台 2GB 的服务器,Chrome 跑 5 个页面就卡了,Obscura 能同时跑 30 个以上。你想想,这对需要批量抓取的 Agent 来说,差距是质变级别的。

它在 GitHub 上已经 16.5k Star。

最让我惊喜的三个功能

先说一行命令直接出 Markdown。

这是 Obscura 最贴心的设计。AI Agent 读网页,最头疼的不是打开页面,而是从一堆 HTML 里把有用信息提取出来。传统做法是用 Cheerio 或 BeautifulSoup 解析 DOM,写一堆选择器,页面结构一变就全废了。

Obscura 内置了一个叫 LP.getMarkdown 的方法,底层用 Rust 实现的 DOM 解析器,直接把网页转成干净的 Markdown。对 Agent 来说,拿到 Markdown 就能直接喂给大模型,省掉了整个解析层。

用法特别简单:

obscura fetch https://example.com --dump markdown

一行命令,网页内容就变成 Markdown 输出了。

再说隐身模式,这个是真的能打。

很多反爬工具,检测的是浏览器指纹——你的 Canvas 渲染结果、WebGL 参数、AudioContext 特征、TLS 握手方式,这些组合起来,就像一个人的身份证号。Chrome 装 stealth 插件能改一部分,但改不干净,遇到 Cloudflare 那种级别的,基本白搭。

Obscura 的做法更彻底,每次会话随机生成 Canvas、GPU、AudioContext 指纹,TLS 握手模拟 Chrome 145 的完整特征(包括 GREASE 值),连 Function.prototype.toString 都做了修补,返回 [native code]。最新版跑 creepjs 检测,识别率直接是 0%。你没看错,就是 0%。

启动的时候加个 --stealth 参数就行:

obscura serve --stealth --port 9222

还有兼容性,完全兼容 Puppeteer 和 Playwright。

这点对开发者来说太重要了。Obscura 支持标准的 Chrome DevTools Protocol(CDP),意味着你现有的 Puppeteer 脚本不用改一行代码,只需要把连接地址从 Chrome 换成 Obscura 就行:

const browser = await puppeteer.connect({

browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser'

});

已经有人在 Hermes Agent 的 GitHub 上提了 Feature Request,要把 Obscura 作为内置的浏览器后端。一旦合入,Hermes 用户在抓网页的时候就能直接用 Obscura 替代 Chrome,内存占用直接砍到六分之一。

安全方面也没偷懒

Obscura 默认开启了 SSRF 防护,会拦截对内网 IP 的请求(127.0.0.0/8、10.0.0.0/8 这些),防止 Agent 被恶意网页引导去访问你服务器上的内部服务。另外内置了 3520 多个追踪器域名的屏蔽列表,编译的时候就写死在二进制里了。

这两样功能,看起来不起眼,但对 Agent 场景特别重要。Agent 是自主运行的,它访问什么链接,你不一定能提前审查,有这层防护至少不会被钓鱼。

安装和使用

安装很简单,三种方式:

直接下载二进制: 去 GitHub Releases 页面下载对应平台的包,解压就能用。Linux 需要 Ubuntu 22.04 以上(glibc 2.35+),也支持 macOS 和 ARM64。

Docker: 镜像压缩后只有 57MB,基于 distroless 镜像构建,没有多余的 shell 和包管理器。

从源码编译: 需要 Rust 1.75+,首次编译大概 5 分钟(V8 从源码编译),之后会缓存。

基本用法就三条命令:

# 抓一个页面,输出 Markdown

obscura fetch https://news.ycombinator.com --dump markdown

# 启动 CDP 服务器,开启隐身模式

obscura serve --stealth --port 9222

# 批量抓取,10 个并发

obscura scrape https://a.com https://b.com --concurrency 10

批量抓取的时候,它会自动起多个 worker 进程,用轮询方式分配任务。你不用自己写并发逻辑,一条命令搞定。

最后说几句

Obscura 不是完美的。它的 JS 渲染能力,不如完整的 Chrome,遇到特别复杂的 SPA(单页应用),可能会有兼容性问题。目前版本还是 v0.1.x,API 还在变化,生产环境用的话,需要评估稳定性。另外它没有可视化的开发者工具面板,调试的时候不如 Chrome DevTools 直观。

但对 AI Agent 场景来说,这些缺点真的不重要。Agent 不需要看页面长什么样,它需要的是快速拿到干净的内容,不被反爬拦住,尽量少占资源。这三样,Obscura 全做到了。

如果你现在用 Puppeteer 或 Playwright 跑 Agent,经常遇到内存不够、被反爬拦截、或者抓取速度太慢的问题,Obscura 值得试一试。30MB 内存、85ms 加载、零配置隐身。

Github地址:h4ckf0r0day/obscura