Moli fetch参数全解:8种方式把网页变成Markdown、语义树与JSON的实用清单
【免费下载链接】moliBest headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust项目地址: https://gitcode.com/gh_mirrors/moli/moli
Moli 是一款用 Rust 构建的无头浏览器,专为 AI Agent 设计。它的moli fetch命令是日常抓取的入口:一条命令即可把网页转换成Markdown、语义树、JSON、HTML、截图或 PDF八种形态,并内置了选择器等待、脚本等待、响应等待等完整的"页面就绪"参数。本文用一份实用清单,带你快速掌握 Moli fetch 参数的全部用法。
一、8 种输出格式速查表(--dump)
--dump决定抓取结果"长什么样",是 Moli fetch 最核心的参数。8 种取值(含常用别名)如下:
| 场景 | 参数 | 说明 |
|---|---|---|
| 📝 阅读正文 | --dump markdown(别名md) | 把页面渲染成干净的 Markdown,最常用 |
| 🌲 结构优先 | --dump semantic_tree_text(别名semtree_text) | 紧凑的无障碍语义树文本,噪声少、省 Token |
| 🌿 结构化处理 | --dump semantic_tree(别名semtree) | 面向无障碍的 JSON 结构树,供程序解析 |
| 🧾 程序消费 | --dump json | 返回final_url、status、title、headers、redirect_chain、html等字段 |
| 🔍 精确排查 | --dump html | 输出序列化后的完整 DOM,适合诊断 |
| 🖼️ 视口截图 | --dump screenshot(需--layout) | 输出视口 PNG 到 stdout |
| 📄 整页截图 | --dump screenshot_full(需--layout) | 输出一张完整文档 PNG |
| 📑 分页文档 | --dump pdf(需--layout) | 输出分页 PDF |
三种视觉输出都必须搭配--layout开启按需布局,并且要把 stdout 重定向到文件,例如:
moli fetch --layout --dump screenshot https://example.com > page.png moli fetch --layout --dump pdf https://example.com > page.pdf💡 如果不写--dump,Moli 会把可渲染的 HTML 文档序列化输出;对 PDF、视频这类原始响应则逐字节原样写出。
二、页面就绪参数(--wait):动态页面不抓空的秘诀
JS 渲染页面最头疼的是"抓早了"。Moli 提供五档生命周期等待和四类细粒度等待:
五档--wait-until(默认done):
domcontentloaded/load:对应标准浏览器生命周期事件;networkidle:网络安静后再抓,适合 API 驱动页面(轮询、流式页面慎用);domstable:DOM 变动稳定后再抓,适合客户端渲染页面;done:默认策略,开箱即用。
四类细粒度等待(可叠加、可互斥配对):
# 等待某个稳定内容选择器出现 moli fetch --dump markdown --wait-selector "main article" https://example.com/news # 等待一个 JS 表达式为真 moli fetch --dump markdown --wait-script "window.__ready" https://example.com # 等待某个 API 响应的 URL 或响应体匹配 moli fetch --dump json \ --wait-response-url-regex "/api/(search|results)$" \ --wait-response-json-regex "data.status=^ok$" \ https://example.com/search # 超时兜底:默认 25000ms moli fetch --dump markdown --timeout 15000 https://example.com经验法则:先给窄信号,再加大超时。内容选择器优先于固定延时,
--delay-ms只在页面完全没有可观测信号时兜底使用。
三、高频辅助参数:按需裁剪与定向提取
| 参数 | 作用 |
|---|---|
--eval '<表达式>' | 页面就绪后执行一段 JS,字符串按文本输出、对象输出为紧凑 JSON,适合"只要一个值"的场景,与--dump互斥 |
--with-frames | 把 iframe 内容一并序列化 |
--with-base | 序列化 HTML 时保留 base 元数据 |
--strip-mode js,ui,css,full | 从序列化输出中剥离开源脚本、UI 节点或 CSS 风格 |
--trace-network | 在--dump json中附加结构化网络跟踪对象(需--dump json) |
--disable-js/--disable-css | 完全禁用页面脚本 / 外部样式表 |
-H 'Name: Value' | 为初始导航附加请求头(可多次) |
--cookie-file/-P | 导入 Cookie 或指定 profile 目录,实现登录态复用 |
# 定向提取:只取第一个标题 moli fetch --eval 'document.querySelector("h1")?.textContent.trim()' https://example.com四、效率对比:为什么结构优先更快
Moli 的设计哲学是"DOM 和样式是唯一事实来源",布局与像素只在需要时生成——纯文本抓取完全不触发布局与绘制。在 Lexbench 基准中,Moli 的中位 CPU 时间约为 Chrome 的 15%、峰值内存约 13%:
实操建议:
- 只做文本检索 → 用
markdown/semantic_tree_text,不要开--layout,不付布局成本; - 视觉证据或分页导出 → 才加
--layout,并只启用真正需要的资源族(--image、--font,全部需要时用--resource); - 程序化流水线 →
--dump json拿final_url与status,出问题时再加--trace-network。
五、延伸资料
想深入更多配方(定向 JS 求值、响应检查、会话状态、故障诊断),仓库内已内置给 AI 使用的完整技能文档:
- 官方快速上手:README.md
- 中文文档:docs/README.zh-CN.md
- Agent 技能指南:skills/moli-webfetch/SKILL.md
- 抓取配方大全:skills/moli-webfetch/references/fetch-recipes.md
- fetch 参数定义源码:moli/src/cli.rs
- 输出格式枚举(8 种 dump):moli/src/cli.rs
- HTML 转 Markdown 实现:moli-html2md/src/
掌握--dump的 8 种形态 + 五档等待 + 细粒度响应等待,就覆盖了 Moli fetch 90% 的日常场景。跑一次moli fetch --help,把这份清单收藏起来,随取随用吧!
【免费下载链接】moliBest headless browser for AI agents. Lite, Fast, High-Compatibility. Built in Rust项目地址: https://gitcode.com/gh_mirrors/moli/moli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考