[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-612":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},612,"obscura","h4ckf0r0day\u002Fobscura","h4ckf0r0day","The headless browser for AI agents and web scraping",null,"Rust",15424,1034,49,4,0,248,1303,3659,1459,44.04,"Apache License 2.0",false,"main",true,[],"2026-06-12 02:00:16","\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fh4ckf0r0day\u002Fobscura\u002Fmain\u002Fassets\u002Ficon.png\" alt=\"Obscura\" width=\"80\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch2 align=\"center\">Obscura\u003C\u002Fh2>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>The open-source headless browser for AI agents and web scraping.\u003C\u002Fstrong>\u003Cbr>\n  Lightweight, stealthy, and built in Rust.\n\u003C\u002Fp>\n\n---\n\nObscura 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.\n\n### Why Obscura over headless Chrome?\n\nDesigned for automation at scale, not desktop browsing.\n\n| Metric       | Obscura      | Headless Chrome |\n|--------------|--------------|------------------|\n| Memory       | **30 MB**    | 200+ MB          |\n| Binary size  | **70 MB**    | 300+ MB          |\n| Anti-detect  | **Built-in** | None          |\n| Page load    | **85 ms**    | ~500 ms          |\n| Startup      | **Instant**  | ~2s              |\n| Puppeteer    | **Yes**      | Yes              |\n| Playwright   | **Yes**      | Yes              |\n\n## 🎉 10,000 stars and what's next\n\nI'm 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.\n\nThe open-source engine stays Apache-2.0, fully featured. No feature gating, ever.\n\n**[Get on the waitlist →](https:\u002F\u002Ftally.so\u002Fr\u002FgDWzdD)**\n\n## Install\n\n### Download\n\nGrab the latest binary from [Releases](https:\u002F\u002Fgithub.com\u002Fh4ckf0r0day\u002Fobscura\u002Freleases):\n\n```bash\n# Linux x86_64\ncurl -LO https:\u002F\u002Fgithub.com\u002Fh4ckf0r0day\u002Fobscura\u002Freleases\u002Flatest\u002Fdownload\u002Fobscura-x86_64-linux.tar.gz\ntar xzf obscura-x86_64-linux.tar.gz\n.\u002Fobscura fetch https:\u002F\u002Fexample.com --eval \"document.title\"\n\n# macOS Apple Silicon\ncurl -LO https:\u002F\u002Fgithub.com\u002Fh4ckf0r0day\u002Fobscura\u002Freleases\u002Flatest\u002Fdownload\u002Fobscura-aarch64-macos.tar.gz\ntar xzf obscura-aarch64-macos.tar.gz\n\n# macOS Intel\ncurl -LO https:\u002F\u002Fgithub.com\u002Fh4ckf0r0day\u002Fobscura\u002Freleases\u002Flatest\u002Fdownload\u002Fobscura-x86_64-macos.tar.gz\ntar xzf obscura-x86_64-macos.tar.gz\n\n# Windows\nDownload the `.zip` from the releases page and extract it manually.\n```\n\nNo Chrome, no Node.js, no dependencies. Release archives include both\n`obscura` and `obscura-worker`; keep them in the same directory for the\nparallel `scrape` command.\n\nLinux release builds target Ubuntu 22.04 so the downloaded binary remains\nusable on common LTS servers with glibc 2.35+.\n\n### Build from source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fh4ckf0r0day\u002Fobscura.git\ncd obscura\ncargo build --release\n\n# With stealth mode (anti-detection + tracker blocking)\ncargo build --release --features stealth\n```\n\nRequires Rust 1.75+ ([rustup.rs](https:\u002F\u002Frustup.rs)). First build takes ~5 min (V8 compiles from source, cached after).\n\n## Quick Start\n\n### Fetch a page\n\n```bash\n# Get the page title\nobscura fetch https:\u002F\u002Fexample.com --eval \"document.title\"\n\n# Extract all links\nobscura fetch https:\u002F\u002Fexample.com --dump links\n\n# Render JavaScript and dump HTML\nobscura fetch https:\u002F\u002Fnews.ycombinator.com --dump html\n\n# Wait for dynamic content\nobscura fetch https:\u002F\u002Fexample.com --wait-until networkidle0\n\n# Bound navigation time for slow or broken pages\nobscura fetch https:\u002F\u002Fexample.com --timeout 10\n```\n\n### Start the CDP server\n\n```bash\nobscura serve --port 9222\n\n# With stealth mode (anti-detection + tracker blocking)\nobscura serve --port 9222 --stealth\n```\n\n### Scrape in parallel\n\n```bash\nobscura scrape url1 url2 url3 ... \\\n  --concurrency 25 \\\n  --eval \"document.querySelector('h1').textContent\" \\\n  --format json\n```\n\n## Puppeteer \u002F Playwright\n\n### Puppeteer\n\n```bash\nnpm install puppeteer-core\n```\n\n```javascript\nimport puppeteer from 'puppeteer-core';\n\nconst browser = await puppeteer.connect({\n  browserWSEndpoint: 'ws:\u002F\u002F127.0.0.1:9222\u002Fdevtools\u002Fbrowser',\n});\n\nconst page = await browser.newPage();\nawait page.goto('https:\u002F\u002Fnews.ycombinator.com');\n\nconst stories = await page.evaluate(() =>\n  Array.from(document.querySelectorAll('.titleline > a'))\n    .map(a => ({ title: a.textContent, url: a.href }))\n);\nconsole.log(stories);\n\nawait browser.disconnect();\n```\n\n### Playwright\n\n```bash\nnpm install playwright-core\n```\n\n```javascript\nimport { chromium } from 'playwright-core';\n\nconst browser = await chromium.connectOverCDP({\n  endpointURL: 'ws:\u002F\u002F127.0.0.1:9222',\n});\n\nconst page = await browser.newContext().then(ctx => ctx.newPage());\nawait page.goto('https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_scraping');\nconsole.log(await page.title());\n\nawait browser.close();\n```\n\n### Form submission & login\n\n```javascript\nawait page.goto('https:\u002F\u002Fquotes.toscrape.com\u002Flogin');\nawait page.evaluate(() => {\n  document.querySelector('#username').value = 'admin';\n  document.querySelector('#password').value = 'admin';\n  document.querySelector('form').submit();\n});\n\u002F\u002F Obscura handles the POST, follows the 302 redirect, maintains cookies\n```\n\n## Benchmarks\n\nPage load:\n\n| Page | Obscura | Chrome |\n|------|---------|--------|\n| Static HTML | **51 ms** | ~500 ms |\n| JS + XHR + fetch | **84 ms** | ~800 ms |\n| Dynamic scripts | **78 ms** | ~700 ms |\n\n## Stealth Mode\n\nEnable with `--features stealth`.\n\n### Anti-fingerprinting\n- Per-session fingerprint randomization (GPU, screen, canvas, audio, battery)\n- Realistic `navigator.userAgentData` (Chrome 145, high-entropy values)\n- `event.isTrusted = true` for dispatched events\n- Hidden internal properties (`Object.keys(window)` safe)\n- Native function masking (`Function.prototype.toString()` → `[native code]`)\n- `navigator.webdriver = undefined` (matches real Chrome)\n\n### Tracker Blocking\n- 3,520 domains blocked\n- Blocks analytics, ads, telemetry, and fingerprinting scripts\n- Prevents trackers from loading entirely\n- Enabled automatically with `--stealth`\n\n## CDP API\n\nObscura implements the Chrome DevTools Protocol for Puppeteer\u002FPlaywright compatibility.\n\n| Domain | Methods |\n|--------|---------|\n| **Target** | createTarget, closeTarget, attachToTarget, createBrowserContext, disposeBrowserContext |\n| **Page** | navigate, getFrameTree, addScriptToEvaluateOnNewDocument, lifecycleEvents |\n| **Runtime** | evaluate, callFunctionOn, getProperties, addBinding |\n| **DOM** | getDocument, querySelector, querySelectorAll, getOuterHTML, resolveNode |\n| **Network** | enable, setCookies, getCookies, setExtraHTTPHeaders, setUserAgentOverride |\n| **Fetch** | enable, continueRequest, fulfillRequest, failRequest (live interception) |\n| **Storage** | getCookies, setCookies, deleteCookies |\n| **Input** | dispatchMouseEvent, dispatchKeyEvent |\n| **LP** | getMarkdown (DOM-to-Markdown conversion) |\n## CLI Reference\n\n### `obscura serve`\n\nStart a CDP WebSocket server.\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--port` | `9222` | WebSocket port |\n| `--proxy` | — | HTTP\u002FSOCKS5 proxy URL |\n| `--stealth` | off | Enable anti-detection + tracker blocking |\n| `--workers` | `1` | Number of parallel worker processes |\n| `--obey-robots` | off | Respect robots.txt |\n\n### `obscura fetch \u003CURL>`\n\nFetch and render a single page.\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--dump` | `html` | Output: `html`, `text`, or `links` |\n| `--eval` | — | JavaScript expression to evaluate |\n| `--wait-until` | `load` | Wait: `load`, `domcontentloaded`, `networkidle0` |\n| `--timeout` | `30` | Maximum navigation time in seconds |\n| `--selector` | — | Wait for CSS selector |\n| `--stealth` | off | Anti-detection mode |\n| `--quiet` | off | Suppress banner |\n\n### `obscura scrape \u003CURL...>`\n\nScrape multiple URLs in parallel with worker processes.\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--concurrency` | `10` | Parallel workers |\n| `--eval` | — | JS expression per page |\n| `--format` | `json` | Output: `json` or `text` |\n\n## License\n\nApache 2.0\n\n---\n","Obscura 是一个用 Rust 编写的无头浏览器引擎，专为网页抓取和AI代理自动化设计。它通过V8运行真实的JavaScript代码，支持Chrome DevTools协议，并可以作为Puppeteer和Playwright中无头Chrome的替代品。Obscura轻量级、隐蔽性好，具有内置的反检测功能，适合大规模自动化任务。相比无头Chrome，Obscura在内存占用（30MB）、启动速度（即时启动）以及页面加载时间（85毫秒）等方面表现更优。此外，Obscura还计划推出托管版本，提供管理基础设施、住宅代理和专属支持服务。此开源项目遵循Apache 2.0许可证，承诺永远不进行功能限制。",2,"2026-06-11 02:38:03","CREATED_QUERY"]