Mochi.js:Bun原生高保真浏览器自动化库
「Mochi.js是一款Bun原生的浏览器自动化框架,通过关系一致性指纹引擎和生物力学模型,实现无痕浏览器自动化,替代Playwright和Puppeteer。」
在浏览器自动化领域,Playwright和Puppeteer长期占据主导地位,但它们留下的数字指纹让自动化行为容易被检测。Mochi.js的出现,为开发者提供了一种全新的选择——一个完全基于Bun运行时、原生支持Chrome DevTools Protocol(CDP)的高保真浏览器自动化库。
Mochi.js的核心创新在于其关系一致性指纹引擎。传统自动化工具在生成浏览器指纹时,往往从不同来源拼凑参数,导致指纹不协调——例如,一个Mac用户代理(UA)却搭配了Linux的WebGL渲染器。Mochi.js通过一个48条规则的有向无环图(DAG),为每个指纹表面(包括Canvas、WebGL、音频、字体、MediaDevices、WebGPU)生成一致的指纹。所有指纹都源自单一(profile, seed)对,确保任何检测工具都无法通过参数不一致发现异常。
Mochi.js的另一个亮点是它的行为合成模块。通过生物力学模型,Mochi.js模拟真实用户的操作:humanClick、humanType、humanScroll等方法基于贝塞尔曲线路径、菲茨定律运动时间和对数正态分布按键延迟生成。这些操作可以参数化配置,包括手部抖动、打字速度(WPM)和滚动风格等,让自动化行为与真实用户无异。
网络请求方面,Mochi.js完全依赖Chromium自身的网络栈。通过CDP的Network.loadNetworkResource和page.evaluate('fetch'),所有HTTP请求都使用真实的Chrome JA4/JA3/H2指纹,无需额外的FFI或并行HTTP层,从根本上避免了指纹不一致问题。这使得Mochi.js在对抗Turnstile等验证码时具有天然优势,因为它能自动点击可见复选框,并在验证码升级时提供回调处理。
Mochi.js的代码设计极其简洁。启动一个隐身浏览器只需三行代码:导入库、传入profile和seed、创建页面。profile参数可以指定操作系统和浏览器版本(如linux-chrome-stable或mac-m4-chrome-stable),seed参数用于生成一致的指纹,确保同一用户在不同会话中的指纹稳定性。
此外,Mochi.js支持自定义初始化脚本注入,使用JIT友好的代理陷阱(proxy traps),在页面脚本执行前注入自定义代码。例如,开发者可以定义window.__site_marker等标记,用于后续的站点识别或调试。
项目还提供了基线对比机制。开发者可以从真实设备捕获指纹基线,存储在仓库中。每次Pull Request都会对比当前会话的Probe Manifest与基线,零差异是CI的硬性门控条件。任何有意为之的差异都必须附带书面理由,确保指纹的一致性和可追溯性。
Mochi.js目前仅支持Bun运行时,不依赖Node.js或Python,也没有任何专有组件。它取代了传统上需要组合Patchright、fingerprint-injector、Turnstile clicker和curl-impersonate等多个工具的复杂流程,用一个库实现了端到端的隐身浏览器自动化。对于需要高保真自动化测试、数据采集或验证码对抗的开发者来说,Mochi.js提供了一个值得关注的新方案。
来源:Heooo AI工具导航