ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

monolith 快速上手指南:将完整网页保存为单文件 HTML 的完整流程

monolith 快速上手指南:将完整网页保存为单文件 HTML 的完整流程 monolith 快速上手指南将完整网页保存为单文件 HTML 的完整流程【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolithmonolith 是一个用 Rust 编写的命令行工具和库能把整个网页连同 CSS、图片、JavaScript 一起打包进一个独立的 HTML 文件。它解决的核心痛点是浏览器另存网页只能存下一个孤零零的 HTML配套的样式和图第二天就全挂了。如果你需要离线归档网页、做内容快照或者把网页当邮件发给别人monolith 一条命令就能搞定。项目全景monolith 把网页变成一块单页巨石它做了什么monolith 先把你给的 URL 抓成 HTML然后解析成 DOM 树逐节点遍历把link relstylesheet引用的样式表连同里面的import和图片url()递归内联把img包括srcset、audio、video、iframe乃至 favicon 拉下来转成 data URL最后序列化回一个 HTML5 文档。整个过程都在 src/core.rs 和 src/html.rs 里完成你拿到的就是一个自包含文件。三个值得知道的点离线保真与wget -mpk存出一堆松散文件不同monolith 把所有资源嵌成 data URL断网打开照样完整渲染统一处理边角料CSSimport链、picture的srcset、iframe 递归嵌入、SVGuse符号引用、src与data-src双属性都有专门逻辑见 src/html.rs 中的walk函数细粒度开关每个资源类别图/CSS/JS/字体/音视频/帧都能单独丢弃还能用内容安全策略把文档从外网断连代码结构很克制核心模块分工明确测试也覆盖了 CSS 内联、编码、cookies 等场景可参考 tests/ 下的用例。前置条件确认 Rust 工具链与安装通道项目要求说明操作系统Linux / macOS / Windows / FreeBSD 等主流发行版均有现成包安装方式三选一Cargo或 Homebrew/Chocolatey/Scoop/Snap 等包管理器不想编译就选包管理器从源码编译时libssl开发库 cargo见下方获取代码步骤抓取动态页面时可选Chromium 或 Chrome用 headless 模式预渲染后再交给 monolith需要走代理时设置http_proxy、https_proxy、no_proxy环境变量monolith 会自动沿用如果你只是想先跑通唯一硬性要求就是装上一个 monolith后面再说。获取代码用 cargo install 安装 monolith 二进制最省事的方式是直接装预编译二进制无需自己碰 Rust 工具链cargo install monolith # 或者任选其一 brew install monolith choco install monolith scoop install main/monolith更常见的情况是目标发行版已经打包好了比如 Arch 上pacman -S monolith、Alpine 上apk add monolith、FreeBSD 上pkg install monolith这些都是一条命令的事。如果以上通道在你的平台上都不通可以从源码编译需要libssl和cargo仓库自带 Dockerfile 也说明了这条路线git clone https://gitcode.com/GitHub_Trending/mo/monolith cd monolith make install装完之后用monolith -V确认版本号能正常打印这一步能验证二进制确实进了 PATH。跑通主流程执行核心命令并查看生成的单文件 HTML现在进入正题。命令形态就是monolith 目标 -o 输出目标可以是网页 URL、本地 HTML 文件也可以是管道里的-monolith https://example.com/article/ -o article-%timestamp%.html输出路径支持占位符%title%用页面标题命名、%timestamp%替换为保存时刻、%ext%替换为htm这些替换逻辑在format_output_path里所以批量保存时文件名不会撞车。跑完看一眼结果文件正常应该是这样!-- Saved from https://example.com/article/ at 2026-09-10T02:44:2000:00 using monolith v2.11.0 -- html ... style...import data:text/css;base64,....../style img srcdata:image/png;base64,iVBOR... /判断是否跑对的检查点有三个文件首行有Saved from ...注释记录了来源 URL 和保存时间可用-M去掉这行元数据原文的link href...css已变成 data URLimg的src同样如此断网状态下用浏览器打开版式、图片、图标favicon与线上一致三项都满足说明这份单文件 HTML 可以安心归档了。进阶玩法处理动态页面与 MHTML 输出monolith 本身不内置 JavaScript 引擎依赖 JS 渲染才出内容的页面典型的 SPA直接抓会拿到空壳。标准解法是把无头浏览器当预处理器让 Chromium 先把 JS 跑完、吐出最终 DOM再喂给 monolith 去补资源。注意-b必须指定因为管道输入没有真实 URLmonolith 需要它来解析页面里的相对路径chromium --headless --window-size1920,1080 \ --run-all-compositor-stages-before-draw --virtual-time-budget9000 \ --incognito --dump-dom https://some-site.com/ | \ monolith - -b https://some-site.com/ -o some-site.html其余进阶方向一句话带过用-d白名单、-B -d黑名单限制资源只从指定域名拉取-m输出 MHTML 格式会自动禁用 JS登录页用-C cookies.txt带上 Cookie或直接用https://user:passhost/形式的 URL 做 Basic Auth。避坑指南monolith 常见问题与解法保存下来的页面是 JS 空壳图片和内容都不对原因monolith 不执行 JavaScript动态加载的内容它看不见。 解法按上一节用 Chromium headless 预渲染后再接管道。整页或个别资源报(404)/(file not found)/ 网络错误原因目标站反爬、证书问题或单纯超时默认每个资源 120 秒。 解法-t调整超时-e忽略网络错误失败的引用会原样保留为外链-u换一个 User-Agent自签名证书的场景加-k接受无效 TLS 证书。从 stdin 处理本地 HTML 时报 security error原因file://资源被网页请求时会被拒绝管道输入又没有 base URL 可推断。 解法给-b一个指向本地文件所在目录的file://路径例如cat page.html | monolith - -b /home/me/page/ -o out.html。存出来的文件特别大原因所有图片、字体、音视频都 base64 内嵌了体积必然膨胀。 解法按需求加-i丢图、-F丢字体、-v-a丢视频音频、-f丢 iframe-I还会额外注入 CSP 把文档彻底隔离出外网。想批量跑但控制台刷了满屏的抓取日志原因默认会逐条打印拉取了哪些资源方便排错但很吵。 解法加-q静默日志走的是 stderr输出文件用-o指定时二者互不干扰。收尾到这里你手上已经有一个能把任意网页固化成单文件 HTML 的归档工具安装一行命令、保存一行命令、结果肉眼可验。下一步可以试着自己把-o的%title%模板、域名黑白名单和 headless 管道组合起来搭一条属于自己的离线快照流水线有图形界面需求的话项目里还藏着带 GUI 的 feature flag具体构建方式请参考项目文档。【免费下载链接】monolith⬛️ CLI tool and library for saving complete web pages as a single HTML file项目地址: https://gitcode.com/GitHub_Trending/mo/monolith创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表