做技术的人,多少都有点“收藏癖”。看到一篇好文章,第一反应就是收藏、加书签、丢进 Notion。可等到哪天真想回头细看时,才发现链接已经 404,站点早就改版,或者打开后只剩一个永无止境的加载动画。
不是你没存,而是现代网页本身早已离不开 JS、后端接口和网络请求。一旦断网、改版或关站,那些“存下来的页面”其实什么都没留下。
最近有个用 Go 编写的爆火项目 kage,走了条完全不同的路。
项目简介
kage 是一个命令行工具,专做一件事:把任意网站克隆成可离线浏览的本地镜像,同时彻底剔除所有 JavaScript。

普通网页保存工具只抓取 HTML 源码,但如今大部分网页不过是个空壳,内容全靠 JS 动态生成。kage 则不同,它会启动真正的无头 Chrome 浏览器,等页面完整渲染完毕后,再把浏览器“看到”的最终 DOM 快照下来。随后,脚本、事件处理器、追踪代码会被统统删除,只留下干净的样式、图片、字体和文字内容。最终得到的,就是一份干净、完全可离线、零网络请求的本地副本。
来直观感受下它与同类工具 wget -r、HTTrack、SingleFile 的差异:

这个项目在 GitHub 上已经收获了 2.4k Star,热度相当不错。

功能特色
- 真实渲染后快照,不是存源码:即使是 SPA 内容型页面(博客、文档、Wiki),经由 JS 拼装出的正文也能被正确捕获,从此告别白屏空壳。
- JS/追踪全清除,零网络调用:保存下来的 HTML 里找不到任何
<script> 或 onclick。纯静态打开不会有任何网络请求,对隐私非常友好。
- 资源本地化 + 链接重写:样式表、图片、字体全部下载到本地,
url() 和站内超链接则被改写为相对路径。把文件夹拷到任何地方,双击 index.html 就能流畅翻阅。
- 打包为开放 ZIM 归档或自含二进制:一条命令就能打成 Kiwix 生态兼容的
.zim 文件(可用 Kiwix 手机或桌面端阅读),亦或打包成一个内嵌 Web 服务的独立可执行文件(约 13MB + 站点内容体积),接收方无需安装任何环境,双击即看。
- 爬取范围精确可控:面对大型网站,kage 不会盲目进行全站扫描。你可以通过以下参数精准控制:
--scope-prefix /docs:只爬取指定路径下的内容。
--max-pages 50:最多抓取 50 页就停。
--max-depth 3:最多跟踪 3 层链接深度。
--exclude:排除指定路径前缀。
--subdomains:需要时,也可以将子域名纳入抓取范围。
快速安装与使用
安装
若本机已有 Go 环境(推荐 Go 1.21+):
go install github.com/tamnd/kage/cmd/kage@latest
没有 Go 环境也没关系,直接从项目的 Release 页面下载对应平台的预编译二进制文件,解压即用。或者使用 Docker(镜像自带 Chromium,本机无需安装 Chrome):
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com
kage 需要本机有 Chrome 或 Chromium,它会自动搜寻。若想手动指定路径,可以使用 --chrome 参数或设置 KAGE_CHROME 环境变量。
基本使用
克隆一个网站:
kage clone paulgraham.com
等它跑完,镜像默认会落在 $HOME/data/kage/paulgraham.com/ 目录下。

本地预览:
kage serve $HOME/data/kage/paulgraham.com
# 浏览器打开 http://127.0.0.1:8800

打包成单个 ZIM 文件:
kage pack paulgraham.com # 生成 paulgraham.com.zim
kage open paulgraham.com.zim # 用 kage 打开
打包成自包含可执行文件:
kage pack paulgraham.com --format binary -o paulgraham
./paulgraham # 直接运行,无需安装任何东西

限制爬取范围,快速试用:
kage clone paulgraham.com --max-pages 20 --max-depth 2
写在最后
说真的,谁还没被“网页已过期”坑过?kage 这个工具,就是把那些过度设计的现代网页,打回纯粹的原形保存起来,不用联网,不怕跑路,双击就能看。那种感觉,就像是给自己的整个收藏夹上了一份额外的“离线保险”,相当踏实。
如果你有长期保存某些网站内容的需求——技术文档、博客文章、知识库——不妨试试它。更多细节功能,可移步项目地址查看:
https://github.com/tamnd/kage