什么是Obscura?用于AI代理的Rust无头浏览器
Expert in Web Scraping Technologies
TL;DR:
- Obscura 是一个用 Rust 编写的开源无头浏览器引擎,采用 Apache-2.0 许可,能够通过 V8 运行真实的 JavaScript,并能够使用 Chrome DevTools 协议进行通信——因此 Puppeteer 和 Playwright 脚本可以像连接无头 Chrome 一样连接到它。
- Obscura 发布的基准测试报告每个实例大约需要 30 MB 内存,而无头 Chrome 则超过 200 MB,具有更小的二进制文件和几乎即时的启动时间——这也是它在发布后不久便获得超过 10,000 个 GitHub 星标的原因。
- 您通过单个 WebSocket 端点进行连接:启动
obscura serve --port 9222,然后将puppeteer.connect或 Playwright 的connectOverCDP指向ws://127.0.0.1:9222。 - 这个引擎只是一个抓取堆栈的一部分。 Obscura 提供渲染和内置的隐身功能,但您仍需要自行操作服务器、供应代理出口并处理挑战页面——这些决定了请求在规模上是否成功。
- Scrapeless Scraping Browser 涵盖了操作的另一半:相同的 Puppeteer
connect工作流,但会话来自一个管理的云浏览器,具有 195 多个国家的住宅代理和内置的反检测——不需要运行服务器。 - 免费开始。 新的 Scrapeless 帐户包括免费的抓取浏览器运行时——请在 app.scrapeless.com 注册。
介绍:一个足够小的无头浏览器,可以为每个代理提供独立的实例
AI 代理和抓取管道如今像早期系统那样启动浏览器——一次启动数十个或数百个,每一个都在返回有用数据的一个字节之前渲染 JavaScript。无头 Chrome 从未设计用于这种工作负载:每个实例都具有桌面浏览器的内存占用,而它们的车队成本迅速增加。
Obscura 是对这种不匹配的新答案。它是一个用 Rust 编写的无头浏览器引擎,能够通过V8 引擎 执行真实的 JavaScript,并暴露Chrome DevTools 协议,这使得它成为 Puppeteer 和 Playwright 脚本的替代目标。该项目是依据Apache-2.0 许可开源,并在发布后不久获得了 10,000 个 GitHub 星标。
本指南将介绍 Obscura 是什么,如何安装它,如何将 Puppeteer 和 Playwright 连接到它,以及——同样重要的是——自托管引擎在哪里停止,管理的 云浏览器 又在哪里接管。
什么是 Obscura?
Obscura 是一个轻量级、开源的无头浏览器引擎,使用 Rust 构建,旨在进行网页抓取和 AI 代理自动化。它不嵌入完整的桌面浏览器,而是实现了渲染和协议表面自动化所需的实际功能:一个 JavaScript 运行时(V8)、页面加载、DOM 访问,以及用于远程控制的 Chrome DevTools 协议。
三个设计选择定义了它:
- Rust 核心,V8 执行。 引擎本身是原生 Rust;页面 JavaScript 在 V8 中运行,因此客户端渲染的网站表现得像在 Chrome 中一样,而不是像在没有 JavaScript 的 HTTP 客户端中那样。
- CDP 兼容性。 由于 Obscura 支持 DevTools 协议,现有的 Puppeteer 和 Playwright 代码可以无需重写地连接——您只需更改连接行,而不是脚本。
- 以自动化为中心的占用。 项目发布的基准测试报告每个实例大约需要 30 MB 内存,而无头 Chrome 则超过 200 MB,二进制文件约 70 MB,而不是 300 多 MB,页面加载和启动时间以毫秒为单位而不是秒。那些是项目自己的数据——诚实的结论是数量级,这在您按代理而不是按机器运行浏览器时才是关键。
Obscura 还内置了反检测行为,而不是作为插件,这一点无头 Chrome 并没有。团队正在建设一个托管版本,Obscura Cloud,发布时仅对等待名单开放——因此今天使用 Obscura 意味着需要自行托管。
安装 Obscura
预构建的二进制文件覆盖 Linux(x86_64 和 aarch64)、macOS 和 Windows。在 Linux x86_64 上:
bash
# 下载最新版本的 tarball 并解压
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
# 存档包含两个必须保持在同一目录中的二进制文件:
# obscura(CLI/server)和 obscura-worker(渲染进程)
./obscura --version
Linux 构建要求 glibc 2.35 或更新版本(Ubuntu 22.04+)。如果您更喜欢容器,官方映像是基于无发行版的构建,压缩后约 57 MB:
bash
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura
快速的烟雾测试,测试完整渲染路径——获取页面并评估其 JavaScript:
bash
./obscura fetch https://example.com --eval "document.title"
# "示例域"
连接 Puppeteer 或 Playwright
将 Obscura 启动为 CDP 服务器:
bash
obscura serve --port 9222
它监听 ws://127.0.0.1:9222。从 Puppeteer 开始,安装 puppeteer-core(仅连接的包——你不想要捆绑的 Chromium 下载)并连接:
js
import puppeteer from 'puppeteer-core';
const browser = await puppeteer.connect({
browserWSEndpoint: 'ws://127.0.0.1:9222',
});
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.disconnect();
在 Playwright 中,相应的命令是 connectOverCDP。这个区别很重要:Playwright 的 connectOverCDP 使用 DevTools 协议,而普通的 connect 则使用 Playwright 自己的协议,Obscura 并未实现该协议。
js
import { chromium } from 'playwright';
const browser = await chromium.connectOverCDP('ws://127.0.0.1:9222');
const context = browser.contexts()[0] || await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log(await page.title());
await browser.close();
这就是整个集成。任何基于 page.goto、选择器和 page.evaluate 的脚本现在都可以在比它编写时所用的浏览器引擎轻便一个数量级的环境中运行。
在免费计划中获取您的 API 密钥:app.scrapeless.com
Obscura 的局限
Obscura 解决了引擎问题——以低成本、大规模渲染 JavaScript,并内置隐身特性。它故意不解决操作问题,而对于生产抓取来说,操作问题通常是更棘手的:
- 你来运行基础设施。 Obscura 是您部署、监控、修补和扩展的二进制文件(或容器)。一百个并发会话意味着容量规划和您自己拥有的编排层。
- Egress 由你提供。 每个请求都从你的服务器 IP 发出。限制速率或阻止数据中心范围的网站无论浏览器指纹多么令人信服都会这样做——Obscura 自身的生态系统正是出于这个原因引导用户使用第三方代理提供商。轮换住宅出口是您必须购买和接入的单独产品。
- 挑战页面是你的问题。 隐身引擎减少了流量验证插页出现的频率;它并没有解决出现的那些。处理它们意味着额外的工具和每个网站的工作。
- 托管选项尚未推出。 Obscura Cloud——具备托管基础设施和住宅代理的托管版本——截至出版时仅可加入等待名单。今天,采用 Obscura 意味着采纳以上所有内容。
这些并不是批评;这是一种自托管引擎的标准形态。它只是意味着值得比较的不是“Obscura 与无头 Chrome”——Obscura 在这方面轻松获胜——而是“自托管引擎与托管云浏览器”。
托管路径:Scrapeless 抓取浏览器
Scrapeless 抓取浏览器是一种可定制的、反检测的云浏览器,旨在针对网络爬虫和 AI 代理。它在你的代码中占据与 Obscura 相同的插槽——Puppeteer 连接的 CDP 端点——但会话是在 Scrapeless 的云中创建的,操作部分已经处理:
- 195 个国家/地区的住宅代理,每个会话使用
proxy_country参数选择——无需单独的代理合同。 - 云端 JavaScript 渲染,使用自开发的 Chromium 的反检测浏览器基础设施。
- 会话持久性,适用于登录保护和多步骤流程。
- 无需运行服务器——会话通过 API 创建,按您设置的 TTL 过期。
工作流程与 Obscura 完全相同:Scrapeless SDK 创建会话,Puppeteer 连接到它返回的 WebSocket 端点:
js
import { Scrapeless } from '@scrapeless-ai/sdk';
import puppeteer from 'puppeteer-core';
const client = new Scrapeless({ apiKey: process.env.SCRAPELESS_API_KEY });
// 使用美国住宅出口创建云浏览器会话
const session = await client.browser.create({
session_name: 'obscura-guide-demo',
session_ttl: 180,
proxy_country: 'US',
});
// 与 Obscura 使用的相同连接调用——只有端点发生变化
const browser = await puppeteer.connect({
browserWSEndpoint: session.browserWSEndpoint,
defaultViewport: null,
});
const page = await browser.newPage();
await page.goto('https://example.com', { waitUntil: 'domcontentloaded' });
console.log(await page.title()); // "示例域"
await browser.close();
由于两者都是纯 CDP,它们自然组合在一起:用于高容量渲染不抵制自动化的网站的 Obscura,以及对于流出质量和挑战处理决定结果的目标的无忧刮取浏览器。定价是基于使用量的,免费计划足以运行本指南中的所有操作。要深入了解这个生态系统中的代理连接,Puppeteer未检测指纹浏览器指南展示了针对重检测目标的相同会话生成工作流。
如何选择
| 维度 | Obscura(自托管) | 无忧刮取浏览器(托管) |
|---|---|---|
| 设置 | 下载二进制文件 / 运行容器 | API 调用返回会话 |
| 成本模型 | 您的计算 + 您的代理 | 基于使用量的计划 |
| 流出 | 自备 | 住宅代理,195+个国家,每会话 |
| 规模 | 由您协调实例 | 按需会话 |
| 挑战页面 | 您的工具 | 由平台处理 |
| 最佳契合 | 高容量渲染合作站点;在您自己的基础设施上运行代理集群 | 受保护的目标、特定地理数据、没有多余基础设施的团队 |
如果您的工作负载是成千上万次对不进行反制的网站的轻量级渲染,Obscura 的足迹确实是一个优势,自托管成本也很低。如果您需要的数据处于速率限制、地理墙或流量验证之后,发动机从未成为瓶颈——会话质量才是关键,这也是托管方的职责。
结论:引擎和操作
Obscura 是一个真正的工程成就:一个用 Rust 编写的无头浏览器,具有 V8 执行和 CDP 兼容性,使每个代理的浏览器在经济上合理,基于 Apache-2.0 开源。安装它,将 puppeteer-core 指向 ws://127.0.0.1:9222,现有的自动化即可正常工作——这部分承诺是值得信赖的。
将其视为引擎层,并清楚了解生产刮取还拥有操作层:代理流出、挑战处理和代理基础设施。无忧刮取浏览器通过相同的 puppeteer.connect 工作流提供这一层,因此这两者并不是艰难的选择——尽可能在本地便宜地渲染,然后通过云浏览器进行路由,当目标要求时。
准备构建您的 AI 驱动数据管道了吗?
加入我们的社区以申请免费计划并与构建浏览器自动化管道的开发者联系:Discord · Telegram。
在 app.scrapeless.com 注册以获得免费的刮取浏览器运行时,并在您的目标反制时将其与上述模式配对。
常见问题解答
问:Obscura 是 Chromium 的一个分支吗?
不。Obscura 是一个独立的无头浏览器引擎,用 Rust 编写。它嵌入了 V8 进行 JavaScript 执行,并实现了 Chrome DevTools 协议以兼容,但引擎本身并不是 Chromium。
问:我现有的 Puppeteer 或 Playwright 代码能与 Obscura 一起工作吗?
大多数可以,因为集成表面是 CDP。Puppeteer 通过 puppeteer.connect({ browserWSEndpoint }) 使用 puppeteer-core 连接;Playwright 必须使用 connectOverCDP,而不是 connect,因为 Obscura 不实现 Playwright 的本地协议。作为一个新兴引擎,功能覆盖还在逐渐成熟——测试您的具体脚本,而不是假设与 Chrome 完全相同。
问:Obscura 是免费使用的吗?
是的。该引擎在 Apache-2.0 许可证下开源,没有功能限制。托管的 Obscura Cloud 产品是一个单独的,仅限候补名单的产品。
问:如果 Obscura 内置了反检测功能,我还需要代理吗?
是的,对于任何通过 IP 进行过滤的网站。指纹隐匿和流出质量是独立问题:即使拥有出色的浏览器身份,当请求来自被标记的地址范围时,也无济于事。自托管的 Obscura 流出由您负责;无忧刮取浏览器提供每会话在 195+ 个国家的住宅代理。
问:Obscura 和无忧刮取浏览器可以在同一个项目中使用吗?
是的,这是一种自然的分割。两者都暴露了CDP端点,因此同一个Puppeteer代码库可以将合作的、高流量的目标路由到本地Obscura实例,而将受保护的或地理特定的目标路由到Scrapeless云会话——每个目标之间的唯一区别是脚本连接的WebSocket端点。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



