欣淇
发布于 2026-05-12 / 0 阅读
0
0

Obscura11.6k Stars Rust 30MB PuppeteerAI Agent 10:

🔍 Obscura:11.6k Stars 的 Rust 无头浏览器,30MB 内存替代 Puppeteer,AI Agent 抓网页快 10 倍

项目地址:h4ckf0r0day/obscura | ⭐ 11,692 Stars | 🛠 Rust | 作者:h4ckf0r0day


老实说,每次用 Puppeteer/Playwright 给 AI Agent 配网页抓取能力,我都要深呼吸。装个 Chrome 几百 MB,启动等两秒,内存随便飙到 200MB+,在服务器上跑分分钟把 1G 小机搞崩。

说的就是这玩意儿,Obscura——一个用 Rust 写的无头浏览器引擎,跑 V8 解析 JavaScript,支持 Chrome DevTools Protocol,内存只要 30MB,二进制 70MB,页面加载 85ms。最骚的操作是:Puppeteer 和 Playwright 的代码几乎不用改,直接连 WS 就能用。

为什么值得关注

Obscura 不是"又一个无头浏览器",它是从头为 AI Agent 设计的:

  • 30MB 内存 vs Chrome 的 200MB+ — 服务器上能多开 6 倍的并发实例
  • 85ms 页面加载 — 比 headless Chrome 快 5-10 倍
  • 内置反检测 — 随机指纹、隐藏 webdriver、伪装 native function,防反爬
  • Stealth 模式自带 3,520 个 tracker 黑名单 — 广告追踪脚本直接不加载
  • 一行命令部署 — 不需要装 Chrome、Node.js、任何依赖
  • 一行命令跑起来

    # 下载二进制(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://news.ycombinator.com --eval "document.title"
    

    输出直接就是标题,快到离谱。

    AI Agent 接入实战

    启动 CDP Server

    ./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');
    
    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 也兼容

    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();
    

    批量抓取不费吹灰之力

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

    25 个并发,每个页面 85ms 左右,十几秒干完 100 个页面。Chrome 的话光启动就得等半天。

    防反爬能力

    Obscura 的 --stealth 模式做了全套伪装:

  • 每次会话随机生成 GPU、屏幕、canvas 指纹
  • navigator.webdriver 设为 undefined(真实 Chrome 行为)
  • Function.prototype.toString() 返回 [native code]
  • Object.keys(window) 不暴露内部属性
  • 自动拦截 3,520 个追踪域名
  • 不用再写 page.evaluate 去改 navigator 属性了。

    总结

  • 如果你在用 Puppeteer/Playwright 做 AI Agent 的网页抓取,试试 Obscura,代码不换,内存少 6 倍
  • Rust 写的单二进制,curl 下载就能跑,没有依赖地狱
  • 内置 Stealth 反检测,不用额外折腾指纹伪装
  • Apache-2.0 开源,API 完全兼容 Chrome DevTools Protocol

  • 评论