Monolith 完整保存网页为单个 HTML 文件:从安装到批量归档的完整指南
2026/9/11 4:17:25 网站建设 项目流程

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 monolithscoop 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.html

Cookie 会话则导出 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),仅供参考

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

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

立即咨询