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 是一款命令行工具,能把整个网页打包成一个单独的 HTML 文件,CSS、JS 和图片都以 data URL 形式嵌在里面。适合经常需要离线看网页、做资料归档,或者想把浏览器里几十页标签页变成硬盘上几十个小文件的场景。
浏览器"另存为"到底缺了什么
想离线保存一篇长文,点"另存为",选"网页,仅 HTML",文件是下来了——可打开一看,样式和图片全没了。选"网页,全部"呢?又多出一个杂乱的文件夹,里面散落着 CSS、图片、脚本,把文件夹挪个位置就集体挂掉。
用wget -mpk递归下载?能下下来,但同样是目录结构复杂,离线打开时引用经常对不上。
Monolith 的解法很直接:它把整页当 DOM 处理,遍历出每一个 CSS、图片和 JS 资源,逐个抓取后编码成 base64 的 data URL 塞回文档,最终只产出一个自包含的 HTML5 文件。断网双击打开,渲染效果和在线时一模一样。核心流程就在 src/core.rs 里,src/html.rs 负责具体改写节点。
三步装好并保存第一个网页
装好只需要一条命令。装过 Rust 环境的直接:
cargo install monolith不想装 Rust 就交给包管理器:macOS/Linux 用brew install monolith,Arch 用pacman -S monolith,Alpine 用apk add monolith,Windows 可选choco install monolith或scoop install main/monolith。
装完跑通第一步,一条命令的事:
monolith https://example.com -o example.html-o里还支持占位符:%title%自动换成页面标题,%timestamp%换成保存时间戳,批量存的时候文件名不会撞车。
实战场景:四招覆盖 90% 的需求
批量保存一个 URL 列表。把手头想存的链接扔进urls.txt,每行一条,然后:
while read url; do monolith "$url" -o "saved/%title%.html"; done < urls.txt过滤广告和统计脚本。-d是域名白名单,-B把-d指定的域名变成黑名单。想剔掉统计追踪,命令这样写:
monolith -I -B -d .googleanalytics.com https://example.com -o clean.html-I(隔离)会加一条 CSP,让保存后的页面只依赖内嵌数据、不再向互联网发起请求,和域名过滤是天然搭档。
JS 动态渲染的页面。Monolith 本身不带 JS 引擎,内容靠脚本加载的站点得先渲染再保存:
chromium --headless --dump-dom https://example.com \ | monolith - -I -b https://example.com -o example.html-表示从管道读,-b告诉它相对链接该往哪解析。
需要登录的页面。基本认证直接把账号密码写进 URL:
monolith https://user:pass@example.com -o auth.htmlCookie 会话则导出 Netscape 格式的cookies.txt,用-C cookies.txt传进去。
常用参数速查
| 参数 | 作用 |
|---|---|
-o FILE | 输出文件,-表示 stdout,支持%title%/%timestamp%占位符 |
-e | 忽略网络错误,个别资源挂了也照常保存 |
-d DOMAIN | 域名白名单,只从指定域名抓资源 |
-B | 把-d列表当成黑名单 |
-c/-j/-i | 分别跳过 CSS、JS、图片 |
-F/-a/-v/-f | 跳过字体、音频、视频、iframe |
-E CHARSET | 强制输出编码,如-E utf-8 |
-t SECONDS | 网络请求超时,默认 120 秒 |
-u USER-AGENT | 自定义 User-Agent,应对反爬 |
-C FILE | 从文件读取 cookies |
-M | 去掉自动注入的时间戳和来源信息 |
-m | 输出 MHTML 格式(会自动禁用 JS) |
常见坑与解法
症状:保存后的页面断网打开,部分图片或样式缺失。原因:某个资源下载失败,默认会终止整个任务。解决:加-e忽略网络错误,让能抓到的资源先落地。
症状:保存的页面是空白或残缺的骨架。原因:站点内容靠 JS 运行时加载,Monolith 不执行脚本。解决:走无头浏览器管道,chromium --headless --dump-dom URL | monolith - -I -b URL -o out.html。
症状:抓取时直接报 TLS 证书错误。原因:目标站点用了自签或过期证书。解决:加-k允许无效 X.509 证书。
症状:保存耗时很长,部分资源卡在超时。原因:默认每个资源最多等 120 秒,慢站点容易被拖住。解决:-t 300放宽超时,或加-i -v砍掉不需要的大资源。
回到开头那个场景:一篇长文,一条命令,出来的单个 HTML 里样式、图片、脚本一个不缺,随便丢到网盘、U 盘或别的机器上,离线打开照样完整。归档这件事,到这一步真的只剩"存"一个字了。
【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考