一、项目介绍
让 Agent 抓网页,最常见的方案是 Playwright 或 Puppeteer:功能全,但 Chromium 动辄几百 MB 内存,一开就是几秒启动;更麻烦的是 CDP 协议天然把整棵 DOM 树推给客户端,对上下文极不友好。
Moli 是为 AI Agent 重新设计的一套无头浏览器,用 Rust 写成。它的设计原则是"结构优先,像素按需"——完整保留浏览器运行时,但把布局与渲染做成按需触发:只需要结构时就不渲染像素,需要截图或 PDF 时才付出渲染代价。
它同时提供四种接入方式:CLI、CDP、WebDriver Classic 与 WebDriver BiDi,因此能无痛替换掉现有的浏览器自动化链路。输出格式也照顾模型:可以把页面渲染成 Markdown,或直接返回紧凑的语义树文本。它在 Product Hunt 上拿下当日产品第一,star 数约 2.16 万,Apache 2.0 协议。
Moli 的设计核心是一句话:结构优先,像素按需。传统无头浏览器启动 Chromium 时,布局与渲染是默认开启的——因为渲染引擎本身就在那,不算白费。但对 AI Agent 来说,很多时候它要的只是"这个页面有什么内容",根本不需要像素。渲染整棵页面再把 DOM 塞给客户端,是一种浪费。
Moli 保留了完整的浏览器运行时,但把布局与渲染做成可触发。用结构时不必付像素代价,需要截图或 PDF 时再渲染。这种"按需"的思路直接体现在它的输出格式上:可以把页面转成 Markdown,也可以直接返回紧凑的语义树文本——后者比原始 DOM 小得多,对模型友好度也高得多。
四种接入方式(CLI、CDP、WebDriver Classic、WebDriver BiDi)是另一个务实选择。前者便于手工调用与脚本集成,后三者让它能替换掉现有的 Playwright / Puppeteer 链路而不必重写整套测试代码——迁移成本因此低得多。
它还把 skills 目录直接放进仓库:让 Agent 按其中的说明自行完成安装并调用 moli-webfetch 等能力,而不是人去翻译文档。对已经在用 Agent 的团队,这条路径省掉了不少沟通成本。
资源占用是它反复强调的指标,仓库里直接给出了混合公开网页抓取基准、样例 Agent 工作负载与 WPT 测试结果,可以自己核对。
二、项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | Moli |
| GitHub地址 | https://github.com/lexmount/moli |
| 项目描述 | Best headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust |
| 作者 | lexmount |
| 开源协议 | Apache License 2.0 |
| 开源状态 | 公开 |
| Languages | Rust |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2026-10-30 |
三、核心优势
- 按需布局与渲染:只要结构不付像素代价,显著降低资源占用
- Rust 编写,完整浏览器运行时之外保持轻量足迹
- CLI、CDP、WebDriver Classic、WebDriver BiDi 四种接入方式,兼容现有自动化链路
- 可输出 Markdown 或紧凑语义树,直接喂给模型而非原始 DOM
- 支持截图、整页截图与分页 PDF 三种可视化产物
- 官方提供 skills 目录,可让 Agent 自己完成安装与调用
- 明确支持 Linux、macOS 与 Windows
- Markdown 与语义树两种输出格式,体积远小于原始 DOM,对模型更友好
--eval可在页面就绪后执行表达式并等待 Promise,配合--dump导出交互后的页面- 支持视口截图、整页截图与分页 PDF 三种可视化产物,按需取用
- 内置成本控制机制,便于把抓取任务的开销控制在可预期范围内
四、适用场景
适合需要为 Agent 批量抓取网页、做搜索调研或网页自动化,但被 Chromium 资源占用拖累的团队;也适合想把现有 Playwright / Puppeteer 链路换成更省资源实现的场景。
判断 Moli 适不适合你,先看你的浏览器自动化在为什么发愁。如果是"抓页面给模型读",它几乎正中靶心;如果是"做完整的端到端 UI 测试",那 Moli 目前更适合做抓取与结构提取这一环,测试断言部分仍可能需要配合其他工具。
迁移评估建议做一次对照:拿现有 Playwright 脚本里最典型的抓取任务,用 Moli 的 fetch --dump markdown 与 --dump semantic_tree_text 各跑一遍,对比输出质量与耗时。这个对比通常几分钟就能做完,结论很明确。
语言与生态方面,Moli 支持 Linux、macOS 与 Windows,安装脚本覆盖三个平台;语言绑定方面提供了 CLI、CDP 与两套 WebDriver 协议接入,所以从任何语言调用都不别扭。
最后提醒一点:它输出的语义树是"紧凑"的,信息密度高于原始 DOM,但也意味着丢掉了一些原始 HTML 属性。如果你的下游逻辑依赖特定 class 或 id,需要先用 --eval 做交互并配合具体选择器,不能直接假设语义树里什么都有。
如果你正被同类问题反复绊住——要么是人肉重复劳动没完,要么是工具装不上跑不通、要么是产出的结果根本没法用——那这个项目值得先花十分钟装一遍试试。
五、安装教程
当前最新版本 v1.1.19。下面是可直接执行的安装方式:
# 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" 常见报错与处理:依赖缺失时先确认运行时版本(Node、Python、Rust、PHP 等)是否满足项目要求;网络超时多半是镜像或代理问题,可换源重试;权限类报错请检查当前账号是否已登录对应平台,以及脚本是否需要管理员权限执行。
六、使用示例
下面这段是可以直接参照的真实用法:
# 用默认策略把页面渲染成 Markdown
moli fetch \
--dump markdown \
--wait-until done \
https://example.com
# 直接返回紧凑的、模型友好的语义树
moli fetch \
--dump semantic_tree_text \
--wait-selector body \
https://example.com
# 开启按需布局,输出视口截图 / 整页截图 / PDF
moli fetch --layout --dump screenshot https://example.com > page.png
moli fetch --layout --dump screenshot_full https://example.com > full-page.png
moli fetch --layout --dump pdf https://example.com > page.pdf七、常见问题
问:它和 Playwright 有什么区别?答:Moli 把布局与渲染做成按需触发,只要结构时不付像素代价;并且输出格式直接面向模型(Markdown、语义树),而不是原始 DOM。
问:能替换现有自动化链路吗?答:可以,它同时提供 CDP、WebDriver Classic 与 WebDriver BiDi 三种协议接入方式。
问:怎么让 Agent 自己会用?答:仓库里带 skills 目录,可让 Agent 按其中的说明完成安装并调用 moli-webfetch 等能力。
问:支持哪些平台?答:官方明确支持 Linux、macOS 与 Windows。
问:和 Playwright 能共存吗?答:可以共存,Moli 负责抓取与结构提取,Playwright 继续负责复杂交互测试。
问:输出语义树会丢信息吗?答:会比原始 DOM 精简,依赖特定属性时建议配合 --eval 与选择器使用。
以上是实际使用中最常被问到的几个问题。若遇到文档未覆盖的情况,可以先翻项目的 Issues 与 Discussions 区,那里有更多真实踩坑记录。
八、总结
Moli 在把高频动作压缩成一条命令这件事上做到了足够扎实的程度:它不追求大而全,而是把一个具体环节做透,让原本要靠人盯的流程变成可以交给工具执行的流程。
从上面的安装步骤和使用示例可以看出,它的接入成本并不高:一条命令装好,按提示完成配置,然后就能把它放进你原有的工作流里。如果你正在被同类问题困扰,不妨先在自己的一小块任务上试一轮,确认顺手了再推广到日常流程中。
评论 0
还没有评论,来说两句吧。