小马的 AI 工具集

无头浏览器

Rust 写的轻量无头浏览器引擎,为 AI 智能体和爬虫提供反检测自动化

无头浏览器
类型 CLI 19,234 星标 更新 2026-07-14 许可 Apache-2.0 原仓库 主页

Obscura

Obscura

Documentation Website Book a demo Releases

开源的无头浏览器,专为 AI 代理和网页抓取设计。
轻量、隐身,使用 Rust 构建。


Obscura 是一个用 Rust 编写的无头浏览器引擎,专为网页抓取和 AI 代理自动化而构建。它通过 V8 运行真实 JavaScript,支持 Chrome DevTools 协议,可作为 Puppeteer 和 Playwright 中无头 Chrome 的即插即用替代品。

为什么在无头 Chrome 之外选择 Obscura?

专为规模化自动化而设计,而非桌面浏览。

指标ObscuraHeadless Chrome
内存占用30 MB200+ MB
二进制大小70 MB300+ MB
反检测能力内置
页面加载时间85 ms~500 ms
启动速度瞬时~2s
Puppeteer 兼容
Playwright 兼容

🎉 10000 星,下一步计划

我们正在开发 Obscura Cloud 托管版本,提供管理式基础设施、住宅代理和专属支持。适合希望使用引擎但不想自行运维的用户。

开源引擎保持 Apache-2.0 许可,功能完整。绝不设功能限制。

加入候补名单 →
📅 预约演示 →

赞助商

Obscura 由赞助商支持,确保开发的独立性。

有意赞助?请发送邮件至 hello@obscura.sh

SX.org 🚀 Obscura × SX.org
在 AI 代理、浏览器自动化或网页抓取中使用 Obscura?通过 SX.org 的稳定代理,让您的工作流更加强大。

🌍 覆盖 235 个国家,1200 万+ IP
🏠 700 万+ 住宅 IP
📱 400 万+ 移动 IP
🏢 100 万+ 企业代理
🔁 轮换和粘性会话
📍 灵活的 geo 设置
🌐 支持 HTTP、HTTPS 和 SOCKS5
⚡ 连接成功率高达 99.97%
🛟 24/7 支持

🎁 使用代码 Obscura3gb 获取 免费 3GB 试用

稳定代理,更少拦截,最可靠的 Obscura 自动化。
ProxyEmpire 🚀 Obscura × ProxyEmpire
在 AI 代理、浏览器自动化或网页抓取中使用 Obscura?通过 ProxyEmpire 的可靠住宅和移动代理,提升您的能力。

🌍 覆盖 170+ 国家,3000 万+ 住宅 IP
📱 4G/5G 移动代理
🔄 轮换和粘性会话
🎯 城市、地区和 ISP 定位
🔐 支持 HTTP、HTTPS 和 SOCKS5

🎁 使用代码 OBSCURA35 获取 35% 循环折扣

更好的代理,更少拦截,更可扩展的自动化。
MangoProxy MangoProxy 在 200+ 国家提供住宅、ISP、数据中心和移动代理。凭借稳定连接、快速响应时间和可扩展的代理基础设施,深受全球企业信赖。
使用促销代码 OBSCURA 可享静态 ISP 代理 8% 折扣。
9Proxy 9Proxy 提供住宅代理,起价仅为 $0.018/IP 或 $0.68/GB。拥有 2000 万+ IP,覆盖 90 多个国家。粘性或轮换会话,可通过桌面或移动应用管理。
NodeMaven NodeMaven — 市场上最可靠的代理提供商,拥有最高质量的 IP。专为自动化、网页抓取、SEO 研究和社交媒体管理而构建。

99.9% 正常运行时间
粘性会话最长 7 天
每个代理均支持 IP 过滤
无需 KYC
流量返现 — 最高可获得 10% 返现

🎁 使用代码 OBSCURA35 享移动和住宅代理 35% 折扣,或使用 OBSCURA40 享 ISP(静态)代理 40% 折扣。
Rapidproxy Rapidproxy — 一个拥有 9000 万+ 真实 IP、覆盖 200 多个国家的住宅代理平台。支持轮换、地理定位和高并发,提高抓取成功率。立即开始您的免费试用!

灵活定价,起价 $0.65/GB
流量永不过期
支持 HTTP / HTTPS / SOCKS5 协议
专为规模而构建的高速、低延迟网络

🎁 使用折扣码 RAPID10 获取 10% 折扣

安装

下载

Releases 获取最新二进制文件:

# 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
./obscura fetch https://example.com --eval "document.title"

# Linux ARM64 (aarch64)
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-linux.tar.gz
tar xzf obscura-aarch64-linux.tar.gz

# Arch Linux (AUR)
yay -S obscura-browser

# macOS Apple Silicon
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-aarch64-macos.tar.gz
tar xzf obscura-aarch64-macos.tar.gz

# macOS Intel
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-macos.tar.gz
tar xzf obscura-x86_64-macos.tar.gz

# Windows
从发布页面下载 `.zip` 文件并手动解压。

无需 Chrome,无需 Node.js,无依赖。发布归档中包含 obscuraobscura-worker;将它们放在同一目录下以支持并行 scrape 命令。

Linux 发布版本针对 Ubuntu 22.04 构建,因此下载的二进制文件可在常见 LTS 服务器(glibc 2.35+)上正常使用。

Docker

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

镜像位于 Docker Hub。基于 distroless/cc 的多阶段构建,无 shell,无包管理器,压缩后约 57 MB。

从源码构建

git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
cargo build --release

# 启用隐身模式(反检测 + 跟踪拦截)
cargo build --release --features stealth

需要 Rust 1.75+(rustup.rs)。首次构建约需 5 分钟(V8 从源码编译,之后会缓存)。

快速入门

获取页面

# 获取页面标题
obscura fetch https://example.com --eval "document.title"

# 提取所有链接
obscura fetch https://example.com --dump links

# 渲染 JavaScript 并导出 HTML
obscura fetch https://news.ycombinator.com --dump html

# 将导出或 eval 输出写入文件
obscura fetch https://example.com --dump text --output page.txt

# 逐字流式输出原始响应体(二进制安全;绕过 JS/DOM 层)。
# 用于图片、JSON、JS、CSS 或任何非 HTML 资源。
obscura fetch https://picsum.photos/200/300 --dump original > photo.jpg

# 列出页面会获取的每个子资源 URL(NDJSON 格式;每个资源一条记录)
obscura fetch https://example.com --dump assets

# 通过 HTTP 或 SOCKS 代理进行获取
obscura --proxy socks5://127.0.0.1:1080 fetch https://example.com --dump text

# 等待动态内容
obscura fetch https://example.com --wait-until networkidle0

# 限制导航超时时间,适用于缓慢或损坏的页面
obscura fetch https://example.com --timeout 10

启动 CDP 服务器

obscura serve --port 9222

# 启用隐身模式(反检测 + 跟踪拦截)
obscura serve --port 9222 --stealth

并行抓取

obscura scrape url1 url2 url3 ... \
  --concurrency 25 \
  --eval "document.querySelector('h1').textContent" \
  --format json

# 抑制 stderr 上的抓取进度,以输出适合脚本的结果
obscura scrape https://example.com --quiet --format json

# 抓取工作进程继承全局代理
obscura --proxy http://127.0.0.1:8080 scrape https://example.com https://news.ycombinator.com

Puppeteer / Playwright

Puppeteer

npm install puppeteer-core
import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser',
});

const page = await browser.newPage();
await page.goto('https://news.ycombinator.com');

const stories = await page.evaluate(() =>
  Array.from(document.querySelectorAll('.titleline > a'))
    .map(a => ({ title: a.textContent, url: a.href }))
);
console.log(stories);

await browser.disconnect();

Playwright

npm install playwright-core
import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP({
  endpointURL: 'ws://127.0.0.1:9222',
});

const page = await browser.newContext().then(ctx => ctx.newPage());
await page.goto('https://en.wikipedia.org/wiki/Web_scraping');
console.log(await page.title());

await browser.close();

表单提交与登录

await page.goto('https://quotes.toscrape.com/login');
await page.evaluate(() => {
  document.querySelector('#username').value = 'admin';
  document.querySelector('#password').value = 'admin';
  document.querySelector('form').submit();
});
// Obscura 处理 POST 请求,跟踪 302 重定向,维护 Cookies

基准测试

页面加载:

页面ObscuraChrome
静态 HTML51 ms~500 ms
JS + XHR + fetch84 ms~800 ms
动态脚本78 ms~700 ms

完整的基准测试套件(WPT 一致性、障碍课程、真实语料库、与 Chrome 的速度对比)位于独立的仓库:https://github.com/h4ckf0r0day/obscura-benchmark

隐身模式

通过 --features stealth 启用。

反指纹识别

  • 每会话指纹随机化(GPU、屏幕、画布、音频、电池)
  • 真实的 navigator.userAgentData(Chrome 145,高熵值)
  • 分发事件的 event.isTrusted = true
  • 隐藏的内部属性(Object.keys(window) 安全)
  • 原生函数伪装(Function.prototype.toString()[native code]
  • navigator.webdriver = undefined(与真实 Chrome 一致)

跟踪拦截

  • 拦截 3,520 个域名
  • 阻止分析、广告、遥测和指纹识别脚本
  • 完全阻止跟踪器加载
  • 使用 --stealth 时自动启用

CDP API

Obscura 实现了 Chrome DevTools Protocol,以兼容 Puppeteer/Playwright。

方法
TargetcreateTarget, closeTarget, attachToTarget, createBrowserContext, disposeBrowserContext
Pagenavigate, getFrameTree, addScriptToEvaluateOnNewDocument, lifecycleEvents
Runtimeevaluate, callFunctionOn, getProperties, addBinding
DOMgetDocument, querySelector, querySelectorAll, getOuterHTML, resolveNode
Networkenable, setCookies, getCookies, setExtraHTTPHeaders, setUserAgentOverride
Fetchenable, continueRequest, fulfillRequest, failRequest(实时拦截), takeResponseBodyAsStream
IOread, close(分块流式读取大响应体)
StoragegetCookies, setCookies, deleteCookies
InputdispatchMouseEvent, dispatchKeyEvent
LPgetMarkdown(DOM 转 Markdown 转换)

要下载大资源而不使用巨大的 Network.getResponseBody 数据块,可以先调用 Fetch.takeResponseBodyAsStream,然后使用 IO.read / IO.close 分块读取。超过缓存限制(OBSCURA_NETWORK_BODY_BUFFER_BYTES,默认 2 MiB)的响应体不会被保留,因此如果要流式下载大文件,请提高该限制。

CLI 参考

调优 V8

Obscura 直接内嵌 V8。使用 --v8-flags 将原始标志传递给 V8,语法与 Chromium 的 --js-flags 和 Node 的命令行标志相同。最常见的用法是提高堆上限,以修复 JS 密集型页面上的 JavaScript heap out of memory 错误:

obscura --v8-flags "--max-old-space-size=4096" fetch <url>

重型 SPA(脚本执行预算)

Obscura 限制页面的脚本执行阶段,以免单个缓慢或无响应的页面拖慢工作进程。默认预算为 30 秒;提前完成的页面会立即返回,因此该限制只影响持续运行的页面。在慢速网络上,一个非常重的 React/Vue/Angular SPA 在触发数据请求之前可能需要更多时间来启动。可以通过 OBSCURA_SCRIPT_DEADLINE_MS(毫秒)提高预算,并在 CDP 客户端中设置相应的导航超时:

OBSCURA_SCRIPT_DEADLINE_MS=60000 obscura serve --port 9222

obscura serve

启动一个 CDP WebSocket 服务器。

Flag默认值描述
--port9222WebSocket 端口
--proxyHTTP/SOCKS5 代理 URL
--stealthoff启用反检测 + 追踪拦截
--workers1并行工作进程数
--obey-robotsoff遵守 robots.txt

obscura fetch <URL>

获取并渲染单个页面。

Flag默认值描述
--dumphtml输出类型:htmltextlinksmarkdownassets(页面引用的每个子资源 URL 以 NDJSON 格式输出),或 original(原始响应体)
--eval要执行的 JavaScript 表达式
--wait-untilload等待条件:loaddomcontentloadednetworkidle0
--timeout30最大导航时间(秒)
--selector等待的 CSS 选择器
--stealthoff反检测模式
--output将 dump 或 eval 输出写入文件
--quietoff隐藏横幅信息
--proxy继承的全局 HTTP/SOCKS5 代理 URL

obscura scrape <URL...>

使用工作进程并行抓取多个 URL。

Flag默认值描述
--concurrency10并行工作进程数
--eval每个页面的 JS 表达式
--formatjson输出格式:jsontext
--quietoff在 stderr 上隐藏抓取进度
--proxy所有工作进程继承的全局 HTTP/SOCKS5 代理 URL

MCP(模型上下文协议)

Obscura 内置一个 MCP 服务器,向 AI 代理(Claude Desktop、Cursor 等)暴露浏览器自动化工具。

启动

stdio(默认)——适用于 Claude Desktop 以及通过子进程启动的 MCP 客户端:

obscura mcp

HTTP ——适用于通过网络连接的客户端:

obscura mcp --http --port 8080
# 端点:http://127.0.0.1:8080/mcp

两种传输方式均可选的标志:

Flag描述
--proxy <URL>HTTP/SOCKS5 代理
--user-agent <UA>自定义 User-Agent 字符串
--stealth启用反检测模式

Claude Desktop 配置

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

工具

工具描述
browser_navigate导航到指定 URL(url,可选的 waitUntilload / domcontentloaded / networkidle0
browser_snapshot返回当前页面的 URL、标题和正文文本
browser_click通过 CSS 选择器点击元素
browser_fill设置输入值(触发 inputchange 事件)
browser_type向输入框追加文本
browser_press_key派发键盘事件(key,可选的 selector
browser_select_option按 value 或文本选择 <option>
browser_evaluate执行 JavaScript 表达式并返回结果
browser_wait_for等待 CSS 选择器出现(selector,可选的 timeout,单位为秒)
browser_network_requests列出当前页面发出的网络请求
browser_console_messages返回页面记录的 console 消息
browser_close关闭页面并重置浏览器状态

集成

  • Hermes agent 插件:在 Obscura 上运行 Hermes 代理的浏览器任务。该插件在每个会话中启动 obscura serve(或连接到已运行的服务器),并通过 CDP 驱动它,支持可选的 --stealth

许可证

Apache 2.0


在 GitHub 查看完整项目