Mochi.js: 一種用於高保真瀏覽器自動化的 Bun-Native 方法

瀏覽器自動化長期以來一直是開發者與反機器人服務之間的貓鼠遊戲。雖然 Playwright 和 Puppeteer 等工具是測試的行業標準,但它們通常會留下明顯的指紋,使其容易成為複雜檢測系統的目標。Mochi.js 作為一個 Bun-native 框架登場,專門設計用於解決「指紋」問題,確保瀏覽器的身份各個方面在邏輯上是一致的。

傳統自動化的問題

大多數自動化庫嘗試通過修補瀏覽器或注入腳本來覆蓋常見的檢測向量,以隱藏其身份。這通常會產生「科學怪人指紋」(Frankenstein fingerprints)——例如,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-Native 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-Native Stack

與需要 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