Obscura:Rust 写的轻量级无头浏览器,仅需 30MB 内存替代 Chromium

导读Obscura 是一个用 Rust 编写的开源无头浏览器,专为网页抓取和 AI Agent 自动化打造。仅占用 30MB 内存,二进制大小仅 70MB,比传统的 Headless Chrome 小很多,还内置了反检测和隐身模式。可以直接替代 Puppeteer/Playwright 使用。

Obscura:Rust 写的轻量级无头浏览器,仅需 30MB 内存替代 Chromium

做网页抓取或者 AI Agent 自动化,你是不是还在拖着几百 MB 的 Chromium 到处跑?今天介绍一个惊艳的开源项目 —— Obscura,一个用 Rust 写的无头浏览器引擎,直接把内存占用干到了 30MB,二进制大小也才 70MB,完美替代 Headless Chrome。

TL;DR

Obscura 是一个开源无头浏览器,核心优势:

  • 极致轻量化:内存仅 30MB,二进制 70MB,对比 Headless Chrome 的 200MB+ 内存、300MB+ 二进制,小了一个数量级
  • 无需 Chromium:原生渲染,不依赖 Chromium/Chrome,下载就能用
  • 兼容现有工具:支持 Chrome DevTools 协议,可以直接作为 Puppeteer/Playwright 的替代品
  • 内置隐身:自带反指纹、反追踪、反检测能力,做网页抓取更稳
  • 全功能:支持截图、PDF导出、并行抓取、CDP 服务,满足绝大多数自动化需求

为什么需要 Obscura?

现在做网页抓取和 AI Agent 自动化,基本都离不开无头浏览器。但传统方案不管是 Puppeteer 还是 Playwright,都默认捆绑一个完整的 Chromium,体积好几百 MB,内存占用轻松干到几百 MB。对于很多服务器部署、轻量爬虫、边缘计算场景来说,这太重了。

Obscura 就是来解决这个问题的:同样能跑 JavaScript,能渲染网页,能截取截图,兼容 CDP 协议,但体积和内存都小了一个数量级。

核心参数对比

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

从对比就能看出来,Obscura 在轻量化这块做到了极致。对于很多不需要完整浏览器功能的场景,比如静态网页抓取、API 调用后的渲染、简单自动化,Obscura 完全够用,还能省大量资源。

主要功能

1. 原生 JavaScript 渲染

通过 V8 直接运行 JavaScript,维护真实 DOM 树,支持完整的页面渲染。你可以等待网络空闲,可以执行自定义 JavaScript 提取内容,和在浏览器里一样。

2. 截图和 PDF 导出

支持对渲染完成的页面截取 PNG 截图,也能直接导出 PDF。做网页存档、生成报告都很方便。

3. 隐身模式(Stealth)

编译开启 stealth 特性后,自动开启:

  • 每个会话指纹随机化(GPU、屏幕、画布、音频、电池)
  • 真实的 navigator.userAgentData,高熵值
  • event.isTrusted = true 保证分发事件可信
  • 隐藏内部属性,原生函数 masking
  • navigator.webdriver = undefined 匹配真实 Chrome

完全就是真实浏览器的指纹,反爬更容易绕过。

4. CDP 服务兼容

启动 obscura serve 就能开启 CDP WebSocket 服务,Puppeteer/Playwright 直接连上来就能用,不需要改代码,无缝迁移。

5. 并行抓取

obscura scrape 命令可以直接批量并行抓取多个 URL,指定并发数,直接输出 JSON 结果,做爬虫非常方便。

安装使用

下载二进制

直接从 GitHub 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"

也支持 Docker 一键运行:

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

从源码编译

需要 Rust 1.75+ 环境:

git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura

# 带渲染功能
cargo build --release -p obscura-cli --bins --features render

# 带渲染和隐身
cargo build --release -p obscura-cli --bins --features render,stealth

快速上手

抓取单个页面

# 获取页面标题
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

# 截图保存到文件
obscura fetch https://example.com --screenshot example.png

启动 CDP 服务给 Puppeteer/Playwright 使用

# 启动服务,默认端口 9222
obscura serve --port 9222

# 带隐身模式
obscura serve --port 9222 --stealth

然后在代码里连接就行了,比如 Puppeteer:

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');
// ... 你的代码

Playwright 用法类似:

import { chromium } from 'playwright-core';

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

// ... 你的代码

批量并行抓取

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

适用场景

非常适合

  • 网页抓取、数据采集
  • AI Agent 自动化操作
  • 服务器轻量部署,资源有限的 VPS
  • 边缘计算场景
  • 不需要完整浏览器功能的简单自动化

不适合

  • 需要完整浏览器功能,复杂交互
  • 大型复杂网页的全功能测试
  • 需要最新 HTML/CSS 特性完全兼容的场景

Obscura 并不追求 100% 兼容 Chromium 的所有特性,它的目标就是做一个轻量够用的无头浏览器,满足大多数抓取和自动化场景,同时省大量资源。如果你对资源占用敏感,又不需要完整浏览器功能,一定要试试 Obscura。

项目地址

GitHub: https://github.com/h4ckf0r0day/obscura

官方网站: https://obscura.sh

已经 24.6k Star 了,看来大家对轻量方案的需求还是很强烈的,感兴趣快去 Star 一波!