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 monolithLinux 上也可以走发行版自带的渠道:
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),仅供参考