☰
Monolith 快速上手:把整个网页保存为单个离线 HTML 文件
2026/10/2 17:42:47 网站建设 项目流程

Monolith 快速上手:把整个网页保存为单个离线 HTML 文件

【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith

Monolith 是一个用 Rust 编写的命令行工具,可以把网页连同它的 CSS、图片和 JavaScript 一次性抓下来,全部以 data URL 的形式内嵌进文档,最终产出一个自包含的 HTML 文件。保存完成后断开网络,浏览器依然能按在线时的样子渲染这个页面,适合做资料归档、离线阅读和设计参考备份。

Monolith 能解决什么问题

浏览器自带的"另存为网页"通常只会下载主文档加上一堆散落的资源文件,换个目录打开就丢样式。Monolith 的做法是把资源直接编码进 HTML,一个文件走天下:

  • 归档:把经常打开的网页变成磁盘上一个个独立的.html
  • 备份:保留页面原始的字体、图片和脚本,不依赖原站点持续存在
  • 分发:单个文件发给别人,对方不需要网络或额外文件夹

安装 Monolith

根据你使用的包管理器任选一条命令:

cargo install monolith brew install monolith choco install monolith

Linux 上也可以走发行版自带的渠道:

snap install monolith pacman -S monolith apk add monolith

如果想从源码构建,环境需要先装好 cargo 和 libssl 依赖:

git clone https://gitcode.com/GitHub_Trending/mo/monolith cd monolith make install

最小命令:保存第一个网页

monolith https://example.com -o example.html

命令结构就两段:目标地址加-o指定输出文件。目标参数支持三种形式:URL、本地 HTML 文件路径、以及用-表示从标准输入读取;-o同样可以传-表示输出到 stdout。

输出文件名里可以写两个占位符(见 README.md 中的用法示例):

monolith https://example.com -o "%title%-%timestamp%.html"

%title%取页面标题,%timestamp%是保存时间戳,批量保存时文件不会互相覆盖。

处理本地 HTML 文件

如果页面文件已经在本地,把路径直接作为目标传入即可,Monolith 会把同目录下的 CSS、JS、图片等资源一并内嵌:

monolith ./page.html -o page-offline.html

已经拿到 HTML 文本但资源还在原站的情况,用管道输入并用-b告知原始地址,方便解析相对路径:

cat page.html | monolith - -b https://some.site/ -o page-full.html

常用参数:控制嵌入哪些资源

完整参数说明见 src/main.rs 中的 CLI 定义,日常用到的主要是这几个:

  • -I:隔离文档,保存后的页面不再向网络发起请求,彻底离线
  • -i/-j/-c:排除图片、JavaScript、CSS
  • -F/-a/-v:排除字体、音频、视频
  • -m:改用 MHTML 格式输出(该格式不允许 JS,会自动跳过)
  • -M:不写入保存时间和来源 URL 等元信息
  • -n:把<noscript>标签替换为其中的内容

白名单与黑名单:限定资源来源

用-d列出允许的域名;再加-B,这些域名就变成黑名单。比如只从页面自身域名取资源,跳过第三方统计和广告脚本:

monolith -I -d example.com -d www.example.com https://example.com -o example-only.html

反过来把.googleanalytics.com之类写进黑名单也很常见,命令结构相同,只是去掉白名单语义。

保存需要登录的页面

基础认证直接把账号密码写进 URL:

monolith https://username:password@example.com -o saved.html

需要携带已有登录态时,用-C指定 cookie 文件(src/cookies.rs 负责解析):

monolith -C cookies.txt https://example.com -o saved.html

配合无头浏览器处理动态页面

Monolith 本身不带 JavaScript 引擎,首屏之后才渲染出的内容它拿不到。这类页面可以先用无头浏览器导出渲染后的 DOM,再交给 Monolith 补全资源:

chromium --headless --dump-dom https://example.com | monolith - -I -b https://example.com -o example.html

排错建议

  • 部分资源下载失败:加-e忽略网络错误继续保存,其余资源不受影响
  • 遇到自签证书报 TLS 错误:加-k接受无效证书
  • 请求太慢或整体超时:用-t调整单次网络请求的超时秒数(默认 120 秒)
  • 目标站点拦截了默认请求头:用-u换成真实浏览器的 User-Agent
  • 保存出来中文乱码:用-E强制指定字符集,例如-E UTF-8
  • 需要走代理:设置https_proxy、http_proxy、no_proxy环境变量后照常执行

Monolith 把"一个页面、一个文件"变成了可复制、可脚本化的日常操作:先按上面的最小命令跑通一次,再根据保存对象补充-I、域名过滤或无头浏览器管道。更多场景可以在 tests/ 目录下的测试用例里找到对应命令的实际写法。

【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询