kage:把任何网站克隆成纯净离线版的 Go 工具
📅 2026年06月15日 · 技术
你应该遇到过这种事:在浏览器里对一个网页点了"另存为",半年后再打开,要么白屏、要么转圈转不停,要么还在偷偷请求早就下线的统计服务。原因很简单——你存的不是页面,而是别人 JavaScript 的一份薄客户端。kage("影",日语读音 kage)走的是相反的路:它驱动一个真实的无头 Chrome,等页面渲染完,把人类最终看到的那份 DOM 拍下来,再把所有 JavaScript 抽掉,把 CSS、图片、字体拉到本地路径,最后丢回磁盘的就是一堆能直接双击打开的 .html。
它和 wget --mirror 有什么不同
wget / httrack 这类老牌镜像工具抓的是源码,对重度依赖前端框架、靠 JS 在运行时拼出内容的现代站点几乎无能为力。kage 用的是真浏览器:它会等页面 settle,所以单页应用、懒加载内容也能被"渲染后"地保存下来,再去掉脚本,留下的就是一张静态快照。没有追踪、没有网络回连、没有意外。
怎么用
一条 go install 就能装上:
go install github.com/tamnd/kage/cmd/kage@latest
不想本地装 Chrome 的,直接用官方 Docker 镜像(自带 Chromium):
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com
除了 clone,它还能把整个站点 pack 成单个自包含文件方便分发,以及以原生窗口(而不是浏览器标签页)的方式打开离线内容。预编译的 .deb / .rpm / .apk 在 release 页都能找到。
适合什么场景
- 长期归档:把喜欢的长文 / 博客打包成十年后还能打开的离线版。
- 离线阅读:飞行模式或弱网下读完整 SPA 站点。
- 安全分析:拿一份"已经不会跑任何脚本"的静态副本做研究,避免触发页面里的恶意逻辑。
对前端依赖很重的现代网站,kage 提供了一种比传统镜像更靠谱的"截图式"离线方案,Go 实现、单二进制、开箱即用。