Monolith – 用于将完整网页保存为单个 HTML 文件的 CLI 工具

保存页面的浏览器支持

  • 较旧的浏览器(例如 IE5)和当前浏览器(Firefox、Chrome、Safari)都可以保存页面,但结果往往很凌乱:HTML + 资源文件夹、损坏的 CSS/JS,或者像 .webarchive 这样的专有格式。
  • MHTML 过去支持广泛,Chrome 中至今仍可用,但在其他浏览器和移动端上的支持已经退化或不一致。
  • 多条评论表示惊讶:稳健、可移植的单文件保存至今仍不是浏览器的一等公民功能。

Monolith 与其他工具

  • Monolith:一个 Rust CLI,会把所有资源以内联 data URI 的方式放进单个 HTML 文件中,不使用 JS 引擎。适合在不需要 JS 时保存精确的静态快照。一次只能处理一个页面。
  • SingleFile / single-file-cli:浏览器扩展和 CLI,使用真实浏览器引擎,捕获 JS 执行后的 DOM,支持 ZIP/自解压格式,通常能获得高保真结果。速度更慢、体积更重,但能处理 JS 密集型站点和需要登录的页面。
  • 提到的其他工具:wget(递归归档)、ArchiveBox(自托管归档器)、无头 Chrome/Playwright 以及 shot-scraper 之类的实用工具、基于 WARC 的方案,以及各种付费截图 API。

使用场景与工作流

  • 个人知识库:保存每篇有意思的文章、问答或论坛线程;通过文件夹、搜索工具整理,并同步到笔记系统(例如 Joplin、Obsidian)。
  • 长期归档:应对书签、新闻站点和博客中的链接腐烂;将 ArchiveBox 或 Wayback Machine 辅助工具与本地归档一起使用。
  • RAG/LLM 工作流:把多年保存的 HTML 送入本地索引管道。
  • 关于一键浏览器 → Monolith/SingleFile → 笔记集成,以及通过支持扩展的浏览器实现移动端工作流的设想。
  • 关于归档整个应用(例如 Redmine 实例)以及从 Wayback 恢复网站的问题;建议包括递归工具和 ArchiveTeam 文档。

技术与 UX 挑战

  • 由 JS 驱动的网站、无限滚动、Cookie/付费墙遮罩、无头浏览器检测和弹窗横幅都会使归档和截图变得复杂。
  • 变通方法包括注入 JS(滚动、移除遮罩、接受横幅)、广告拦截器、自定义等待条件,以及 UA/特性伪装。
  • 关于格式的争论:data URI、MHTML、WARC;它们在体积、保真度、二进制支持和浏览器兼容性方面各有取舍。Monolith 中的 MHTML 支持计划中,但尚未完成。
  • 对保存页面中嵌入 JS 的担忧(跟踪、认证行为),以及对网络复杂度不断增长、使忠实的本地副本更难实现的担忧。

更广泛的思考

  • 许多人指出网络衰退令人担忧,并认为 Monolith/SingleFile 这类工具是必不可少的保存基础设施。
  • 人们对现代浏览器在归档功能上的“退化”感到沮丧,同时也对填补这一空白的小巧、快速、基于 Rust 的 CLI 工具充满热情。