monolith 单文件网页 在 命令行 上的落地实战:4 步从零到离线可用
【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith
monolith 把任意网页连同 CSS、图片和 JavaScript 内嵌成单文件网页,断网也能原样打开。装好环境执行一条命令,就得到一个自包含的离线快照,还能用仓库自带的本地测试页当场验证效果。
🧩 它能做什么
浏览器的「另存为」只存当前文档,CSS 和图片散落在别的目录里。wget -mpk能把整站目录抓下来,可页面一断网,图片就裂开、样式就丢失。monolith 换了个思路:它把文档里引用的每个资源都下载下来,编码成 data URL 直接写回 HTML,最终只产出一个 HTML5 文件。这个文件拷到任何机器、任何浏览器都能渲染,不依赖网络,也不用维护一堆散件。
monolith 由 Rust 写成,单二进制分发,跨 Linux、macOS、Windows 通用。它没有内置 JS 引擎,纯静态资源最见长;动态渲染页需要额外处理,后面会讲。
📦 动手前:安装与环境
| 项目 | 最低 | 推荐 |
|---|---|---|
| 操作系统 | GNU/Linux / macOS / Windows | 同左,全平台 |
| CPU 架构 | x86_64 或 ARM | x86_64 |
| 内存 | 1 GB | 4 GB |
| 磁盘 | 200 MB | 1 GB |
monolith 从源码编译,产物是单个二进制,不依赖额外运行时库。下面三步从拉取到安装。
# 拉取 monolith 源码(含离线测试数据) git clone https://gitcode.com/GitHub_Trending/mo/monolith cd monolith# 编译 CLI 与 GUI,产物在 target/debug make build# 安装到 ~/.cargo/bin,之后可直接调用 monolith make install30 秒验证,期望输出monolith 2.11.0:
monolith -V🗂️ 数据与参数准备
先跑通,再换自己的目标。推荐用仓库自带本地页,不占网络、结果稳定,方便确认内嵌是否生效。
- 用自带本地页:
tests/_data_/basic/local-file.html,断网可验证。 - 换成线上页面:把 URL 作为目标参数即可。
- 要保存登录态页面时,先导出 cookies 文件备用。
| 参数 | 改成什么 | 为什么 |
|---|---|---|
-o | 输出文件路径 | 指定快照落盘位置,支持%title%占位 |
-b | 页面真实地址 | 本地文件里相对资源靠它定位 |
-I | 加或不加 | 隔离文档,防止保存后再发网络请求 |
⚙️ 核心执行流程
按「准备 → 启动 → 观察 → 收尾」走一遍,全程不到一分钟。
准备一个可保存的目标
目标可以是 URL,也可以是本地 HTML 文件。本地文件适合离线验证,不受网络波动影响。先确定目标,记下它的真实地址;本地文件就记它所在的目录。
执行 monolith 保存命令
# 保存为单文件 HTML,-I 隔离文档,-o 指定输出 monolith -I -o basic.html tests/_data_/basic/local-file.html线上页面同理,把目标换成 URL 即可。常用开关还有-c/-i/-j去 CSS、图、JS,-d白名单域名,-F去字体。
观察抓取日志
monolith 每抓到一个资源,就在 stderr 打印它的 URL。保存成功时,你会看到目标文档连同它引用的 CSS、图片逐行列出。加-q可静音。
收尾:核对单文件网页产物
产物是一个.html文件,所有资源已内嵌,离线打开即可核对。想接纯 JS 渲染的页面,monolith 不带 JS 引擎,可让 headless 浏览器先渲染出 DOM 再管道进来:
chromium --headless --dump-dom https://spa.example.com \ | monolith - -I -b https://spa.example.com -o spa.html✅ 验证与调优
跑完之后,依次做这三件事。
① 确认产物自包含,外部引用应为 0:
grep -o 'src="http[^"]*"' basic.html | wc -l期望值是 0,说明没有残留外链。
② 统计内嵌资源,data URL 数量应接近页面资源总数:
grep -o 'data:' basic.html | wc -l③ 换 MHTML 归档,需要邮件格式时加-m:
monolith -m -o archive.mhtml https://example.com要回归测试改动,用cargo test跑仓库自带用例,它覆盖 CSS 内嵌、data URL、noscript、非常规编码四类场景。
🛠️ 踩坑速查
- 纯 JS 页面存下来是空壳→ 无 JS 引擎 → headless 浏览器预渲染后管道给 monolith
- 本地文件图片没内嵌→ base URL 缺省 → 加
-b指向页面真实地址 - 登录页资源 403→ 请求没带 cookie → 用
-C cookies.txt传入 - 自签证书站点报 TLS 错→ 证书校验失败 → 加
-k接受无效证书
| 编译方式 | 说明 |
|---|---|
make install(vendored OpenSSL) | 静态链接 OpenSSL,免系统依赖、避版本冲突 |
📁 项目速览
monolith/ ├── src/ # CLI 与库源码,core.rs 是保存主流程 ├── tests/_data_/ # 离线样例页,跑验证用 ├── snap/ # Snap 打包配置 ├── Cargo.toml # 依赖与 feature 定义 └── Makefile # build / install / test 入口- 保存主流程
- 命令行入口
- 本地测试页
到这里,能断网打开的 monolith 单文件网页快照已在你的机器上跑通。
- 用
-d/-B收放资源域名 - 接上 MHTML 归档格式
- 把 headless 渲染接进管道
以上内容基于 monolith v2.11.0,命令与路径如有变动以仓库为准。
【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考