☰
kage:一行命令把任意网站存进硬盘,还能离线打开——无头浏览器本地快照工具完整上手指南
2026/9/26 21:12:37 网站建设 项目流程

kage:一行命令把任意网站存进硬盘,还能离线打开——无头浏览器本地快照工具完整上手指南

【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage

kage是一个开源的本地网站快照工具:用一行命令驱动无头浏览器渲染整个网站,剥掉全部 JavaScript,把页面、CSS、图片、字体全部下载到本地硬盘,得到一个可以离线打开、零代码执行的网站镜像。无论是坐飞机、断网、还是给十年后的自己存一份备份,这份完整指南带你快速上手。

为什么"另存为"总是失败?

你肯定遇到过:点"Save As"存下一页,六个月后打开是空白或永远转圈。原因很简单——现代网站不是一个文档,而是一段程序。服务器发出的 HTML 往往只是个空壳,你看到的页面是浏览器里的 JavaScript 现场拼出来的。"另存为"存到的是空壳,而不是页面。

kage 走了另一条路:

  1. 渲染:用真实的无头 Chrome 打开每个页面,等网络安静下来,抓取 JavaScript 执行完毕后的最终 DOM——和你打开"检查"看到的一模一样
  2. 剥离:删掉所有<script>标签、onclick等事件处理器、javascript:链接,让页面彻底"失去行动能力"
  3. 本地化:下载全部样式表、图片、字体,把引用改写成本地路径

结果就是:落盘的页面看起来和线上完全一样,但不运行任何代码、不发任何网络请求、不追踪任何东西。核心流程实现见 introduction.md。

一键安装步骤

kage 是单个二进制文件,安装方式任选其一:

# Go 用户 go install github.com/tamnd/kage/cmd/kage@latest # macOS brew install --cask tamnd/tap/kage # Windows scoop bucket add tamnd https://github.com/tamnd/scoop-bucket scoop install kage

也提供apt/dnf包、.deb/.rpm/.apk安装包,以及自带 Chromium 的 Docker 镜像。安装细节见 installation.md。

⚠️唯一依赖:kage 需要一台装有 Chrome 或 Chromium 的电脑(容器镜像除外)。它会自动查找系统安装,也可以用--chrome指定路径。找不到浏览器时,首次运行还会自动下载一份专用 Chromium。

快速上手:两行命令拿到离线镜像

以 Paul Graham 的随笔站为例,核心循环只有两步:

# 1. 克隆网站到 $HOME/data/kage/paulgraham.com/ kage clone paulgraham.com # 2. 用本地服务器离线读回 kage serve $HOME/data/kage/paulgraham.com # 然后打开 http://127.0.0.1:8800

就这么简单。每篇文章、每张图片、每个样式表都被冻结在你的硬盘上,零网络即可完整浏览。爬取完成后的磁盘结构长这样:

paulgraham.com/ ├── index.html # 首页,脚本已剥离 ├── greatwork.html # 一篇文章 └── _kage/ # 本地化资源与爬取状态 ├── paulgraham.com/site.css # 本地样式表 └── state.json # 断点续爬状态

直接双击index.html用浏览器打开也能离线渲染;而kage serve启动的是本地静态服务器,能保证站点内的相对链接像线上一样正常跳转。

控制爬取范围:常用参数速查

大站点别让它跑飞,这几个参数最常用(完整列表见 cli.md):

参数作用
--max-pages 50最多渲染 50 页,先"尝个鲜"
--max-depth 2只跟进 2 层链接
--scope-prefix /doc只爬某个路径及其子页面
--subdomains把子域名也纳入范围
--exclude /archive跳过某个路径(可重复使用)
--scroll自动滚动页面,触发懒加载图片
--workers 4并发渲染页面数
# 只抓文档区、最多 200 页、3 层深度 kage clone example.com --scope-prefix /docs --max-depth 3 --max-pages 200

kage 天生"礼貌":默认遵守robots.txt、自动从sitemap.xml获取种子 URL,并且只留在种子主机内。相关策略见 robots.md。

断网了也不怕:中断后自动续爬

克隆大站经常被打断:按了 Ctrl-C、电脑休眠、网络掉线。kage 每次运行都会把进度写进镜像内的state.json,下次执行同一条命令时自动跳过已完成的页面,从断点继续:

kage clone example.com # ... 中途 Ctrl-C ... kage clone example.com # 输出:resume: 137 pages already done, picking up 412 pages

失败的页面(超时、主机暂时宕机)不会被标记为完成,下一轮自动重试。想推倒重来则加--force,完整机制见 resuming-a-run.md。

把整个网站压成一个文件:kage pack

文件夹好浏览但不好携带——几千个小文件拷贝慢、发给别人也麻烦。kage pack能把整个镜像压成单个文件,三种形态任选:

ZIM 档案(默认)——开放标准格式,任何 ZIM 阅读器都能打开,文本经 zstd 压缩,同一镜像两次打包产出字节级一致的文件:

kage pack paulgraham.com # -> paulgraham.com.zim kage open paulgraham.com.zim # 本地 HTTP 服务读回

自包含可执行文件——把档案粘在 kage 二进制上,对方什么都不用装,双击即开:

kage pack paulgraham.com --format binary -o paulgraham ./paulgraham # 自带服务器,离线展示网站

双击桌面应用——加--app后,macOS 生成.app、Linux 生成 AppImage、Windows 生成无控制台窗口的.exe,图标自动取站点 favicon。详细说明见 packing-a-mirror.md。

像真应用一样打开:原生窗口模式

默认方式下,打包好的二进制会打开系统浏览器,网站出现在又一个标签页里。用webview标签构建 kage 后,它会调用操作系统原生的 WebView(macOS 的 WKWebView、Windows 的 WebView2、Linux 的 WebKitGTK),把离线站点装进独立窗口,观感上就是一个真正的桌面应用:

make build-webview # 需要 cgo kage pack paulgraham.com --format binary --base bin/kage -o paulgraham ./paulgraham # 弹出独立窗口,没有浏览器

该模式实现位于 viewer/webview.go。

它是如何工作的(一张图看懂)

种子URL ─▶ 无头Chrome ─▶ 最终DOM ─▶ 剥离JS ─▶ 资源本地化 ─▶ 落盘 (渲染) (快照) (净化) (重写链接)

页面由一组 Chrome 标签并发渲染,资源由另一组工作进程走普通 HTTP 下载;每个 URL 都确定性地映射到一个本地路径,所以链接在资源下载完成前就能被正确重写。代码按职责分模块组织:

模块职责
clone/爬取主循环:任务队列、渲染工作进程、断点状态
browser/无头 Chrome 控制与 DOM 快照
sanitize/剥离脚本、事件处理器与javascript:链接
asset/下载并本地化 CSS、图片、字体
zim/纯 Go 的 ZIM 读写器
pack/打包成 ZIM 或自包含二进制

总结

kage 用最简单的方式解决了"保存网页"这个二十年老难题:

  • ✅一行命令克隆整站,无头浏览器渲染真实页面
  • ✅零 JavaScript:保存的页面不执行代码、不追踪、不发网络请求
  • ✅断点续爬:Ctrl-C 随时中断,重跑即恢复
  • ✅单文件交付:打包成 ZIM 或自包含可执行文件,发给谁都能离线打开

想从源码开始?

git clone https://gitcode.com/gh_mirrors/kage6/kage cd kage make build # -> bin/kage

现在就把你担心有一天会消失的那个网站,存进硬盘吧。

【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询