lexmount/moli
Best headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust
Moli – 专为 AI 代理打造的无头浏览器
它是什么 – Moli 是一个用 Rust 编写的开源、生产就绪的无头浏览器。它提供完整的网页运行时(HTML、CSS、JavaScript、网络、存储等),但设计为仅在明确请求视觉输出时才进行渲染,以保持极小的资源占用。该二进制文件可通过简单的 CLI、Chrome DevTools 协议(CDP)或标准 WebDriver Classic / WebDriver BiDi 接口驱动,因此现有自动化工具(Playwright、Selenium、Puppeteer 等)无需额外适配器即可与其通信。
为何对 AI / LLM 代理很重要
- 结构优先的工作流 – 大多数代理任务需要 DOM、CSS 级联或网络数据,而非持续绘制的页面。Moli 直接读取浏览器状态,除非您要求,否则跳过布局和绘制。
- 快速且轻量 – 默认模式从不执行真实布局,中位内存约 70 MiB,启动延迟低于 35 毫秒,远低于 Chrome 无头模式(约 770 MiB,> 150 毫秒)。
- 按需视觉 – 当需要截图、PDF 或几何查询时,Moli 会构建单一布局树、渲染帧,然后丢弃绘制状态。没有持续的合成器或 GPU 工作。
- 统一协议端点 – 单一二进制文件提供 CDP、WebDriver Classic 和 WebDriver BiDi,因此您可以选择已使用的自动化库。
核心功能(如 README 所述)
| 功能 | 作用 |
|---|---|
| 完整网页运行时 | HTML5 解析、原生 DOM、V8 JavaScript、CSS 级联、fetch/XHR/WebSocket、cookies、WebCrypto、IndexedDB、OPFS、iframe、workers 等。 |
| 优化提取输出 | moli fetch 可输出 HTML、Markdown、JSON、语义树文本格式或原始截图/PDF。 |
| CLI、CDP、WebDriver Classic 与 BiDi | 同一内核支持三者;Playwright 可通过 chromium.connectOverCDP 连接。 |
| 按需布局与绘制 | --layout 启用真实几何、命中测试、坐标输入、截图和屏幕录制帧;否则仅保留确定性模拟布局。 |
| 精细资源控制 | 标志可启用可选功能(--image、--font、--audio 等),并指向自定义配置文件、缓存或 cookie 文件。 |
| 跨平台 | 提供 Linux、macOS 和 Windows 的预构建二进制文件。 |
| 开源许可 | 双重许可:Apache-2.0 或 MIT。 |
AI 代理的典型使用案例
- 网页搜索与爬取 – 获取页面、等待 JavaScript 稳定,然后返回干净的 Markdown 或 JSON 表示,供下游 LLM 推理。
- 数据提取 – 查询 DOM、运行小型脚本(
--eval)以点击按钮或展开部分,然后导出结果结构,无需渲染图片。 - 交互式自动化 – 使用布局树计算元素框、执行基于坐标的点击,或在需要视觉确认时生成单个截图。
- 评估环境 – 运行强化学习或工具使用循环,其中需要数千次页面加载;低内存/CPU 成本使实验负担得起。
- 工具集成 – 将 Playwright、Selenium 或任何 CDP 客户端连接到
moli serve端点,并将其视为普通浏览器,但占用空间小得多。
快速开始(摘自 README)
# Linux / macOS – 单行安装程序
curl --proto '=https' --tlsv1.2 -fsSL \
https://github.com/lexmount/moli/releases/latest/download/moli-installer.sh | sh
# Windows – PowerShell 安装程序
powershell -ExecutionPolicy ByPass -c "irm https://github.com/lexmount/moli/releases/latest/download/moli-installer.ps1 | iex"
将页面提取为 Markdown
moli fetch --dump markdown --wait-until done https://example.com
获取语义树(模型友好)
moli fetch --dump semantic_tree_text --wait-selector body https://example.com
按需截图
moli fetch --layout --dump screenshot https://example.com > page.png
运行自动化服务器
moli serve # 仅 DOM 优先
moli serve --layout # 启用几何与截图
底层工作原理(高级)
- Rust 内核 – 该浏览器是原生 Rust 程序,而非 Chromium 包装。
- 网络 –
libcurl处理 HTTP(S) 和多请求并发。 - HTML 解析 –
html5ever构建 DOM 树。 - JS 引擎 –
rusty_v8嵌入 V8 以提供完整 JavaScript 支持。 - CSS – Servo/Stylo 提供选择器匹配和级联计算。
- 布局与文本 – Taffy(框布局)+ Parley(文本整形)仅在请求
--layout时生成几何。 - 软件渲染 – AnyRender/Vello(CPU)加上
usvg和 Rust 图像生态系统生成 PNG/PDF 帧。 - 状态模型 – DOM + 计算样式是唯一事实来源。当需要视觉操作时,会构建临时工作布局树,冻结为紧凑的
FrozenLayoutTree,用于操作后丢弃。没有持续的合成器或 GPU 管线。
基准测试(如报告所述)
| 基准 | Moli | Chrome 无头模式 |
|---|---|---|
| 公开网页爬取(192 个 URL) | 53.6% 有用页面,中位 1.43 秒,73 MiB RSS | 52.6% 有用,1.43 秒,773 MiB RSS |
| 示例代理工作负载 | CDP 就绪 34.85 毫秒,峰值 102 MiB PSS | CDP 就绪 169.37 毫秒,峰值 349 MiB PSS |
| Lexbench-Headless-Browser(1,308 个任务) | 81.9% 成功,中位 CPU 100.6 毫秒,中位内存 92 MiB | 99.8% 成功,中位 CPU 687 毫秒,中位内存 697 MiB |
| WPT 测试套件 | 1.612M 测试通过(完整运行) | – |
这些数字说明 Moli 达到 约 Chrome 的 15% CPU 时间和约 13% 的峰值内存,同时仍能处理大多数真实世界页面。
项目状态与生态系统
- 生产就绪 – README 指出该浏览器已可用于生产工作负载,并正在积极开发中。
- 与 Lexmount 的关系 – Moli 是开源核心;Lexmount 也提供构建于其上的托管云服务(Lexmount Browser),但该二进制文件可完全独立运行。
- 社区 – Discord 社区链接、Trendshift 徽章和星标历史图显示有活跃的用户基础。
- 许可 – 双重许可 Apache-2.0 / MIT,第三方组件另行列示。
非专家的 TL;DR
Moli 是一个快速、低内存的无头浏览器,您可以从代码或命令行控制它。它为 AI 代理提供现代网页的完整功能(JavaScript、CSS、网络),但除非您明确请求截图或几何,否则会跳过繁重的视觉渲染。这使其非常适合大规模网页爬取、数据提取,或任何需要“读取”网页而无需完整 Chrome 实例负担的 AI 工作流。
写过它的文章
相关
- 项目
- 项目
- 项目
- 项目
- 项目