Mochi.js: 一种基于 Bun 原生的高保真浏览器自动化方案

浏览器自动化长期以来一直是开发者与反机器人服务之间的猫鼠游戏。虽然 Playwright 和 Puppeteer 等工具是测试领域的行业标准,但它们往往会留下明显的指纹,使其容易成为复杂检测系统的目标。Mochi.js 作为一种 Bun 原生框架登场,旨在通过确保浏览器身份的每个方面在逻辑上保持一致,专门解决“指纹”问题。

传统自动化的弊端

大多数自动化库试图通过修补浏览器或注入脚本来覆盖常见的检测向量,从而隐藏自己的身份。这往往会产生“弗兰肯斯坦指纹”——例如,User-Agent 可能声称浏览器运行在 macOS 上,但 WebGL 渲染器却揭示了基于 Linux 的环境。这些不一致性正是 FingerprintJS Pro 等现代机器人检测器所寻找的特征。

Mochi.js 的五大支柱

为了实现高保真隐身,Mochi.js 构建在五个核心技术支柱之上:

1. 关系一致性引擎

Mochi.js 不会随机分配属性,而是使用一个包含 48 条规则的有向无环图 (DAG) 从单个 (profile, seed) 对中推导出指纹。这确保了 canvas、WebGL、audio、fonts 和 WebGPU 数据在关系上是连贯的。如果 profile 被设置为 macOS 上的特定版本 Chrome,那么所有其他指纹特征都会进行调整以匹配该特定环境,从而消除了通常会触发机器人检测的不一致性。

2. Chromium 原生 Fetch

机器人被检测出的最常见方式之一是通过 TLS 握手和 HTTP/2 指纹 (JA3/JA4)。Mochi.js 避免了使用单独的 HTTP 层或 FFI 来伪装 Chrome 的常见陷阱。相反,它通过 Chrome DevTools Protocol (CDP) 直接将 session.fetch() 调用路由至 Chromium,从而在定义上确保了网络流量与真实用户的浏览器无法区分。

3. 行为合成

隐身不仅仅关关于浏览器“是什么”,还在于它的“行为方式”。Mochi.js 实现了生物力学模型来模拟人类交互:

  • Bezier Paths: 鼠标移动包含过冲和修正,以模仿人类的不精确性。
  • Fitts's Law: 移动时间根据目标的大小和距离进行计算。
  • Lognormal Digraph Delays: 通过在特定按键组合之间加入真实的延迟,来模拟打字速度。

4. 探测器清单约束 (Probe-Manifest Harness)

为了维持其隐身能力,该库包含一个“Probe-Manifest”约束机制。该系统从真实设备中获取基准数据,并在 CI 流水线中将实时会话与这些基准进行对比。任何偏差都必须附带书面理由,以确保工具不会退化到可检测的状态。

5. 统一的 Bun 原生技术栈

与需要 Patchright、指纹注入器和 Python sidecars 等复杂流水线的传统设置不同,Mochi.js 是专为 Bun 构建的单一库。这减少了开销并简化了隐身浏览器的部署。

实现与使用

Mochi.js 旨在保持 Playwright 用户的“肌肉记忆”,提供类似的 API。只需几行代码即可启动一个基础的隐身会话:

import { mochi } from "@mochi.js/core";

const session = await mochi.launch({
  profile: "linux-chrome-stable",
  seed: "user-12345",
});

const page = await session.newPage();
await page.goto("https://target.example/checkout");

await session.close();

社区反馈与批评

虽然 Mochi.js 的技术雄心令人印象深刻,但 Hacker News 的初步反馈凸显了几个关键的担忧点:

  • 稳定性与可靠性: 一些用户报告在导航至特定机器人检测网站或在某些页面(例如 Grok)上渲染时出现崩溃,这表明该工具可能仍处于早期且不稳定的阶段。
  • 透明度悖论: 一位评论者指出,通过公开文档化 DAG 和指纹清单,开发者可能会为反机器人服务提供改进检测方法的路线图,从而可能加速“猫鼠游戏”的进程。
  • 调试模式困境: 自动化社区的一个常见批评是,在调试模式下运行的浏览器(CDP 所需)通常是可检测的。用户质疑 Mochi.js 是否能有效掩盖浏览器运行在受控环境这一事实。
  • 文档与 UX: 反馈表明首页和文档并非移动端友好,一些人认为这与该库专注于高保真模拟的目标相矛盾。

结论

Mochi.js 代表了一种复杂的尝试,旨在超越简单的修补,转向对真实浏览器环境的系统性模拟。通过专注于关系一致性和生物力学行为,它为需要高隐身自动化的人群提供了一个充满前景的替代方案,前提是它能克服早期采用者所报告的初始稳定性障碍。

Sources