mcpField
O
obscura

obscura

github.com/h4ckf0r0day开发29.5k164 次安装今天更新
代码仓库

关于 obscura

Obscura 是一款 Rust 无头浏览器和命令行工具,可在不启动 Chromium 的情况下进行自动化、页面检查与捕获。它结合 DOM 和渲染工作流,并可选用隐匿防护,同时支持 CDP 和 MCP。

主要功能

  1. 01抓取页面并执行 JavaScript
  2. 02捕获截图与 PDF 输出
  3. 03通过 Chrome DevTools Protocol 自动化
  4. 04可选浏览器指纹防护
  5. 05拦截列表中的跟踪器域名

适用场景

  1. 01检查或提取网页内容
  2. 02捕获页面截图或 PDF
  3. 03通过 CDP 操作浏览器
  4. 04向 MCP 客户端提供浏览器操作

MCP 相关

运行 `obscura mcp` 可通过标准输入输出提供服务,也可使用 `--http` 开启 HTTP 访问。MCP 客户端可导航、检查并操作当前页面;启用渲染的构建还提供截图图像和嵌入式 PDF 资源。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/h4ckf0r0day/obscura --skill obscura

安装后在 Claude Code 中输入/obscura确认已加载。

详细介绍

Obscura

将 Obscura 用作轻量、具备隐身能力的 Rust 无头浏览器以进行自动化。它内嵌 V8,掌控 DOM 与渲染管线,并提供 Chrome DevTools Protocol 工作流,无需启动 Chromium。将渲染与隐身视为一等的、互为补充的能力。

构建变体

官方发布的归档文件和 Docker 镜像包含渲染功能。若从源代码检出,请使用 render 特性以发布模式构建:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --features render

若需同时启用渲染与隐身功能,以获得 wreq/BoringSSL 传输、浏览器身份保护和追踪器拦截,请这样构建:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --features render,stealth

若只需要 DOM、提取或 CDP 自动化,可不带渲染功能进行构建:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --no-default-features
CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --no-default-features --features stealth

从源代码工作时,下文命令中请使用 ./target/release/obscura。

使用隐身功能

隐身构建保留完整的渲染、截图、屏幕流、PDF、CDP 和 MCP 功能。它在 TLS、HTTP 请求头、User-Agent、navigator 和 WebGL 等层面提供一致的浏览器指纹;屏蔽 navigator.webdriver;掩盖被修补的原生函数;并拦截内置的追踪器域名列表。

使用全局 --stealth 标志在运行时启用隐身功能。它适用于 fetch、serve、scrape 和 mcp,可以放在子命令之前或之后:

obscura --stealth fetch https://example.com --screenshot page.png
obscura serve --stealth --port 9222

运行时标志需要使用 render,stealth 构建,才能启用 wreq/BoringSSL 传输。

获取、执行与捕获

obscura fetch https://example.com --dump text
obscura fetch https://example.com --eval "document.title"
obscura fetch https://example.com --screenshot page.png
obscura fetch https://example.com \
  --eval "window.scrollTo(0, document.documentElement.scrollHeight)" \
  --screenshot bottom.png

CLI 截图功能会写出 PNG,且只接受一个 URL。省略 --wait 时,将使用自适应等待,上限为五秒。显式指定 --wait N 时,则为 N 秒的固定延迟。--timeout 同样以秒为单位,单独限制导航时长。

若要绕过 DOM 和 JavaScript 处理,获取二进制或原始 HTTP 响应,请使用 --dump original。若需处理大量 URL,且所需输出不要求每个 URL 各生成一张截图,请使用 scrape。

访问本地 http://127.0.0.1:N 需要全局标志 --allow-private-network,它会解除对回环地址、RFC1918 和链路本地地址的拦截;否则获取会失败,并报错 Access to private/internal IP address 127.0.0.1 is not allowed。

驱动 CDP

启动服务:

obscura serve --port 9222

使用 puppeteer-core 连接 Puppeteer,或使用 chromium.connectOverCDP 连接 Playwright。标准的 page.screenshot() 支持视口截图和整页截图;page.pdf() 生成基于光栅的打印输出。当用户需要截取页面下方部分时,请在视口截图前通过页面 JavaScript 滚动页面。

对于 Page.captureScreenshot、Page.startScreencast 和 Page.printToPDF,请使用原始 CDP。屏幕流客户端必须使用 Page.screencastFrameAck 确认每一个 Page.screencastFrame。帧由页面活动驱动,这不是固定帧率的桌面捕获。

PDF 输出支持纸张尺寸、页边距、横向、缩放、背景以及页面范围。目前它不提供可选择的文本、带标签的 PDF、大纲、页眉/页脚,或完整的 CSS 分页媒体行为。

驱动 MCP

使用 obscura mcp 启动 stdio 模式,或使用 obscura mcp --http --port 3000 启动 HTTP 模式。先导航,再检查或与当前页面交互。在导航、点击、滚动或框架重新渲染之后,请刷新快照或可交互元素列表,因为元素引用可能已经变化。

启用渲染的 MCP 构建会将 browser_screenshot 作为 MCP PNG 图像提供,并将 browser_pdf 作为嵌入式 PDF 资源提供。MCP 不会推送屏幕流帧;若需要该工作流,请选择 CDP。

验证视觉行为

先使用确定性的测试夹具隔离待测行为。然后在初始位置和滚动后的位置,对一组广泛的真实站点进行测试。进行引擎对比时,需保持视口、设备缩放比例、User Agent、网络输入、等待稳定策略、滚动、动画时间以及截取边界完全一致。

在解读差异之前,先确认两个引擎都已成功完成导航,并生成了非空白图像。像素指标应视为回归预警信号,而非最终结论。检查资源加载完成情况、盒模型几何、换行、结构边缘、裁剪,以及固定定位和粘性定位的表现;对于确认的真实问题,将其还原为测试夹具。不要引入针对特定主机名的渲染逻辑。

准确设定预期

Obscura 支持许多常见的布局与绘制路径,但它并非内置的 Chrome 构建版本。冷门 CSS、Service Worker、部分 Web API、原生媒体、GPU 或合成器效果、PDF 结构以及平台字体光栅化等方面,可能与 Chromium 存在差异。编辑项目文档时,应保留其既有定位与已发布的基准测试结论。添加或更新性能或保真度测量数据时,请使用基准测试套件及相同的输入。

评论

支持 Markdown