@GoJun315: 一位 16 岁开发者,开源了一个无头浏览器引擎,专为爬虫和 AI Agent 自动化设计。 项目名叫 Obscura,使用 Rust 构建,已狂揽 14600+ GitHub Star。 与 headless Chrome 对比优势明显:…
摘要
一位16岁开发者开源了基于Rust的无头浏览器引擎Obscura,专为爬虫和AI Agent自动化设计,内存占用仅30MB,已获得超14600 GitHub星标。
查看缓存全文
缓存时间: 2026/06/09 10:44
一位 16 岁开发者,开源了一个无头浏览器引擎,专为爬虫和 AI Agent 自动化设计。
项目名叫 Obscura,使用 Rust 构建,已狂揽 14600+ GitHub Star。
与 headless Chrome 对比优势明显:
- 内存占用:30MB vs Chrome 的 200MB+,差距 7 倍以上
- 页面加载:85ms vs Chrome 的 500ms 左右
- 启动速度:瞬间启动 vs Chrome 的 2 秒
- 二进制体积:70MB vs Chrome 的 300MB+
- 内置反检测:自动绕过指纹识别和 tracker 屏蔽,Chrome 完全没有
GitHub:https://github.com/h4ckf0r0day/obscura…
而且兼容 Puppeteer 和 Playwright 协议,老项目改一行代码就能直接换上。
另外还可以接入到 Claude Code、Codex 等 AI 工具,让 Agent 拥有真正操作浏览器能力。
适合做爬虫、数据采集、或者想给 AI Agent 接互联网能力的开发者。
h4ckf0r0day/obscura
Source: https://github.com/h4ckf0r0day/obscura
Obscura
The open-source headless browser for AI agents and web scraping.
Lightweight, stealthy, and built in Rust.
Obscura is a headless browser engine written in Rust, built for web scraping and AI agent automation. It runs real JavaScript via V8, supports the Chrome DevTools Protocol, and acts as a drop-in replacement for headless Chrome with Puppeteer and Playwright.
Why Obscura over headless Chrome?
Designed for automation at scale, not desktop browsing.
| Metric | Obscura | Headless Chrome |
|---|---|---|
| Memory | 30 MB | 200+ MB |
| Binary size | 70 MB | 300+ MB |
| Anti-detect | Built-in | None |
| Page load | 85 ms | ~500 ms |
| Startup | Instant | ~2s |
| Puppeteer | Yes | Yes |
| Playwright | Yes | Yes |
🎉 10,000 stars and what’s next
We are working on Obscura Cloud the hosted version, with managed infrastructure, residential proxies, and dedicated support. For people who want the engine without operating it themselves.
The open-source engine stays Apache-2.0, fully featured. No feature gating, ever.
Sponsors
Obscura is supported by sponsors who help keep development independent.
Want to sponsor? Email [email protected].
|
Swiftproxy — Premium residential proxies built for privacy, automation, and scale. 80M+ residential IPs in 190+ countries Rotating & sticky sessions Non-expiring traffic Free trial available Country, state & city targeting HTTP, HTTPS & SOCKS5 support 🎁 Use code PROXY90 for 10% off. |
|
🚀 Obscura × ProxyEmpire Using Obscura for AI agents, browser automation, or web scraping? Power it with reliable residential and mobile proxies from ProxyEmpire. 🌍 30M+ residential IPs in 170+ countries 📱 4G/5G mobile proxies 🔄 Rotating & sticky sessions 🎯 City, region & ISP targeting 🔐 HTTP, HTTPS & SOCKS5 support 🎁 Use code OBSCURA35 for a 35% recurring discount. Better proxies. Fewer blocks. More scalable automation. |
|
MangoProxy provides residential, ISP, datacenter, and mobile proxies in 200+ countries. Trusted by businesses worldwide for stable connections, fast response times, and scalable proxy infrastructure. Use Promo code OBSCURA for 8% off Static ISP Proxies. |
Install
Download
Grab the latest binary from 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
Download the `.zip` from the releases page and extract it manually.
No Chrome, no Node.js, no dependencies. Release archives include both
obscura and obscura-worker; keep them in the same directory for the
parallel scrape command.
Linux release builds target Ubuntu 22.04 so the downloaded binary remains usable on common LTS servers with glibc 2.35+.
Docker
docker run -d --name obscura -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura
Image on Docker Hub. Multi-stage build on distroless/cc, no shell, no package manager, ~57 MB compressed.
Build from source
git clone https://github.com/h4ckf0r0day/obscura.git
cd obscura
cargo build --release
# With stealth mode (anti-detection + tracker blocking)
cargo build --release --features stealth
Requires Rust 1.75+ (rustup.rs). First build takes ~5 min (V8 compiles from source, cached after).
Quick Start
Fetch a page
# Get the page title
obscura fetch https://example.com --eval "document.title"
# Extract all links
obscura fetch https://example.com --dump links
# Render JavaScript and dump HTML
obscura fetch https://news.ycombinator.com --dump html
# Write dump or eval output to a file
obscura fetch https://example.com --dump text --output page.txt
# Stream the raw response body verbatim (binary-safe; bypasses the JS/DOM layer).
# Use this for images, JSON, JS, CSS, or any non-HTML resource.
obscura fetch https://picsum.photos/200/300 --dump original > photo.jpg
# List every sub-resource URL the page would fetch (NDJSON; one record per asset)
obscura fetch https://example.com --dump assets
# Fetch through an HTTP or SOCKS proxy
obscura --proxy socks5://127.0.0.1:1080 fetch https://example.com --dump text
# Wait for dynamic content
obscura fetch https://example.com --wait-until networkidle0
# Bound navigation time for slow or broken pages
obscura fetch https://example.com --timeout 10
Start the CDP server
obscura serve --port 9222
# With stealth mode (anti-detection + tracker blocking)
obscura serve --port 9222 --stealth
Scrape in parallel
obscura scrape url1 url2 url3 ... \
--concurrency 25 \
--eval "document.querySelector('h1').textContent" \
--format json
# Suppress scrape progress on stderr for script-friendly output
obscura scrape https://example.com --quiet --format json
# Scrape workers inherit the global proxy
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();
Form submission & login
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 handles the POST, follows the 302 redirect, maintains cookies
Benchmarks
Page load:
| Page | Obscura | Chrome |
|---|---|---|
| Static HTML | 51 ms | ~500 ms |
| JS + XHR + fetch | 84 ms | ~800 ms |
| Dynamic scripts | 78 ms | ~700 ms |
The full benchmark suite (WPT conformance, obstacle course, real-world corpus, and vs-Chrome speed) lives in a separate repo: https://github.com/h4ckf0r0day/obscura-benchmark
Stealth Mode
Enable with --features stealth.
Anti-fingerprinting
- Per-session fingerprint randomization (GPU, screen, canvas, audio, battery)
- Realistic
navigator.userAgentData(Chrome 145, high-entropy values) event.isTrusted = truefor dispatched events- Hidden internal properties (
Object.keys(window)safe) - Native function masking (
Function.prototype.toString()→[native code]) navigator.webdriver = undefined(matches real Chrome)
Tracker Blocking
- 3,520 domains blocked
- Blocks analytics, ads, telemetry, and fingerprinting scripts
- Prevents trackers from loading entirely
- Enabled automatically with
--stealth
CDP API
Obscura implements the Chrome DevTools Protocol for Puppeteer/Playwright compatibility.
| Domain | Methods |
|---|---|
| Target | createTarget, closeTarget, attachToTarget, createBrowserContext, disposeBrowserContext |
| Page | navigate, getFrameTree, addScriptToEvaluateOnNewDocument, lifecycleEvents |
| Runtime | evaluate, callFunctionOn, getProperties, addBinding |
| DOM | getDocument, querySelector, querySelectorAll, getOuterHTML, resolveNode |
| Network | enable, setCookies, getCookies, setExtraHTTPHeaders, setUserAgentOverride |
| Fetch | enable, continueRequest, fulfillRequest, failRequest (live interception) |
| Storage | getCookies, setCookies, deleteCookies |
| Input | dispatchMouseEvent, dispatchKeyEvent |
| LP | getMarkdown (DOM-to-Markdown conversion) |
CLI Reference
Tuning V8
Obscura embeds V8 directly. Use --v8-flags to pass raw flags through to V8, same syntax as Chromium’s --js-flags and Node’s command-line flags. Most common use is raising the heap cap to fix JavaScript heap out of memory on JS-heavy pages:
obscura --v8-flags "--max-old-space-size=4096" fetch <url>
obscura serve
Start a CDP WebSocket server.
| Flag | Default | Description |
|---|---|---|
--port | 9222 | WebSocket port |
--proxy | — | HTTP/SOCKS5 proxy URL |
--stealth | off | Enable anti-detection + tracker blocking |
--workers | 1 | Number of parallel worker processes |
--obey-robots | off | Respect robots.txt |
obscura fetch <URL>
Fetch and render a single page.
| Flag | Default | Description |
|---|---|---|
--dump | html | Output: html, text, links, markdown, assets (NDJSON of every sub-resource URL the page references), or original (raw response body) |
--eval | — | JavaScript expression to evaluate |
--wait-until | load | Wait: load, domcontentloaded, networkidle0 |
--timeout | 30 | Maximum navigation time in seconds |
--selector | — | Wait for CSS selector |
--stealth | off | Anti-detection mode |
--output | — | Write dump or eval output to a file |
--quiet | off | Suppress banner |
--proxy | — | Inherited global HTTP/SOCKS5 proxy URL |
obscura scrape <URL...>
Scrape multiple URLs in parallel with worker processes.
| Flag | Default | Description |
|---|---|---|
--concurrency | 10 | Parallel workers |
--eval | — | JS expression per page |
--format | json | Output: json or text |
--quiet | off | Suppress scrape progress on stderr |
--proxy | — | Inherited global HTTP/SOCKS5 proxy URL for all workers |
MCP (Model Context Protocol)
Obscura ships an MCP server that exposes browser automation tools to AI agents (Claude Desktop, Cursor, etc.).
Start
stdio (default) — for Claude Desktop and MCP clients that launch a subprocess:
obscura mcp
HTTP — for clients that connect over the network:
obscura mcp --http --port 8080
# endpoint: http://127.0.0.1:8080/mcp
Optional flags (both transports):
| Flag | Description |
|---|---|
--proxy <URL> | HTTP/SOCKS5 proxy |
--user-agent <UA> | Custom User-Agent string |
--stealth | Enable anti-detection mode |
Claude Desktop config
{
"mcpServers": {
"obscura": {
"command": "obscura",
"args": ["mcp"]
}
}
}
Tools
| Tool | Description |
|---|---|
browser_navigate | Navigate to a URL (url, optional waitUntil: load / domcontentloaded / networkidle0) |
browser_snapshot | Return the current page URL, title, and body text |
browser_click | Click an element by CSS selector |
browser_fill | Set an input value (triggers input + change events) |
browser_type | Append text to an input |
browser_press_key | Dispatch a keyboard event (key, optional selector) |
browser_select_option | Select an <option> by value or text |
browser_evaluate | Evaluate a JavaScript expression and return the result |
browser_wait_for | Wait for a CSS selector to appear (selector, optional timeout in seconds) |
browser_network_requests | List network requests made by the current page |
browser_console_messages | Return console messages logged by the page |
browser_close | Close the page and reset browser state |
License
Apache 2.0
相似文章
@NFTCPS: 兄弟们,Headless Chrome 该退休了! 有人用 Rust 搓了个专给 AI Agent 和爬虫用的无头浏览器引擎——Obscura,性能直接把 Chrome 按地上摩擦: ① 内存只吃 30MB(Chrome 吃你几个G) ②…
Obscura is a new Rust-based headless browser engine targeting AI agents and crawlers, offering 30 MB memory usage, 85 ms startup, and CDP compatibility with Puppeteer/Playwright.
@thisguyknowsai:这就是 GitHub 为何无敌……一位开发者构建了一款让 Chrome 显得臃肿的无头浏览器。它叫 Obsc…
一位开发者使用 Rust 构建了名为 Obscura 的开源无头浏览器引擎,专为 AI Agent、网页爬取和自动化设计,声称其比 Chrome 更加轻量。
@CycleDecoded: 搞自动化和爬虫的兄弟可以把之前的方案扔了。 GitHub 上突然爆火了一个开源项目 Index(由 AI 开发者平台 Laminar 团队打造),直接把网页浏览器变成了可调用的 API。这玩意本质上是一个极度丝滑的“AI 浏览器 Agen…
Index 是一个由 Laminar 团队开发的开源 AI 浏览器 Agent,可将任何网站转化为可调用的 API,支持 Claude、Gemini 等视觉模型,在 WebVoyager 上准确率达 92%。
@axichuhai: 兄弟们,这个开源项目直接开了上帝视角,把爬虫效率直接拉高数十倍,已经登顶 GitHub 热榜,5w+ star 数。 以前抓数据要写代码、维护选择器、对付各种反爬机制,现在全省了。 扔个 URL 进去,零代码、原生绕过屏蔽、不用维护选择器…
这个开源项目能零代码抓取网页数据,绕过反爬机制,效率提升数十倍,已获得5万+star。
@geekbb: Go 编写的 CLI 工具,集成了 Web 搜索(Brave/DDG/SearXNG/Exa)、代码搜索(Grep/Sourcegraph/GitHub)和库文档查询(Context7)三种搜索能力,同时支持网页抓取和站点爬取。 为 AI…
一个用 Go 编写的极速、无状态的 CLI 工具,集成 Web 搜索、代码搜索和库文档查询功能,支持网页抓取和站点爬取,专为 AI Agent 和终端使用设计。