返回

文章详情

展示 HN: Kage - 将任何网站阴影化为单个二进制文件以供离线查看

Hacker News2026年6月14日 17:25

kage (影, "shadow") 将一个网站克隆到一个可以离线浏览的文件夹中,所有脚本都被剥离掉。它在真实的无头 Chrome 中打开每个页面,等待页面稳定,然后快照人类会看到的 DOM,最后删除所有 JavaScript 并将 CSS、图像和字体拉到本地路径。最终停留在硬盘上的内容看起来像实时网站并且不运行任何代码。安装 • 快速开始 • 命令 • 克隆 • 打包 • 本机窗口 • 工作原理 你已经知道问题。你在想要保存的页面上点击“另存为”,六个月后你打开它发现屏幕空白、一个永远不会停止的加载器,或仍试图联系不再存在的分析服务器的副本。这个页面从来不是你的。它只是其他人 JavaScript 的一个瘦客户端。kage 采取了另一条路。它驱动一个真实的浏览器,允许页面完成它的所有操作,抓取完成的结果,然后将每个脚本剥离掉。没有追踪,没有网络调用,没有意外。只有 .html 文件,你可以直接从硬盘打开,交给朋友,或者打包成一个文件,忘掉十年。完整的文档和指南位于 kage.tamnd.com。安装 go install github.com/tamnd/kage/cmd/kage@latest 偏好预构建的二进制文件?从发布中获取一个存档,一个 .deb / .rpm / .apk,或一个校验和。或者跳过自己安装 Chrome 并使用容器镜像,它捆绑了 Chromium: docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com kage 驱动一个真实的浏览器,因此它需要主机上的 Chrome 或 Chromium。它会自行找到系统安装;如果要指向特定位置,可以使用 --chrome 或 KAGE_CHROME 环境变量。容器不需要额外的东西。Shell 完成已经打包在里面:kage completion bash|zsh|fish|powershell。快速开始 让我们镜像保罗·格雷厄姆的文章,这样你就可以在飞机上、没有 Wi-Fi 的笔记本电脑上,或者在 2050 年网站终于更改设计后阅读它们: # 1. 将网站克隆到 $HOME/data/kage/paulgraham.com/ kage clone paulgraham.com # 2. 在浏览器中离线阅读 kage serve $HOME/data/kage/paulgraham.com # 打开 http://127.0.0.1:8800 这就是整个循环。每一篇文章、每一张图片、每一份样式表,全部在你的硬盘上冻结且不需要网络。接下来的两个步骤是可选的,但很不错:将整个内容合并为一个文件,并在它自己的窗口中打开。# 3. 将镜像压缩为一个可共享的文件 kage pack paulgraham.com # -> paulgraham.com.zim kage open paulgraham.com.zim # 4. 或者合并成一个可执行文件,*即是*该网站 kage pack paulgraham.com --format binary -o paulgraham ./paulgraham # 自我服务,不需要安装任何东西 命令 命令 作用 kage clone <url> 在无头 Chrome 中渲染一个网站并写入一个可浏览的无脚本镜像 kage serve [dir] 通过本地 HTTP 服务器预览克隆的文件夹 kage pack <mirror-dir> 将镜像压缩为一个 ZIM 归档文件,或一个自包含的查看器二进制文件 kage open <file.zim> 为离线阅读提供打包的 ZIM 进行服务 克隆 # 将整个网站克隆到 $HOME/data/kage/<host>/ kage clone https://paulgraham.com # 仅克隆前 50 页,深度两层,快速了解 kage clone paulgraham.com --max-pages 50 --max-depth 2 # 仅克隆更大网站的一个部分 kage clone go.dev --scope-prefix /doc # 还要拉取子域,并滚动每个页面以触发懒加载的图像 kage clone example.com --subdomains --scroll # 下个月再来并进行原地重新渲染以捕捉新文章 kage clone paulgraham.com --refresh 克隆是一个礼貌的宽度优先爬虫。它读取 robots.txt,从 sitemap.xml 中获取种子,并保持在种子主机上,除非你告诉它另行处理。它也是固执的幂等:每页都由它写入的文件键控,因此通过 http 和 https 访问的同一篇文章,无论尾部是否带有斜杠,都会只抓取一次。按 Ctrl-C,它会在退出时保存位置;再次运行时,它将从停止的地方继续。 --refresh 会原地重新渲染,--force 会删除主机上的现有镜像并重新开始。你实际上会用到的标志: 标志 默认 说明 -o, --out $HOME/data/kage 输出根目录;镜像会落入 <out>/<host>/ -p, --max-pages 0 停止在 N 页后(0 = 无限制) -d, --max-depth 0 跟随的链接深度(0 = 无限制) --scope-prefix 仅爬行以该前缀开头的路径 --subdomains false 将种子主机的子域视为范围内 --exclude 跳过的路径前缀(可重复) --scroll false 自动滚动每个页面以触发懒加载 --workers 4 同时渲染的页面数量 --no-robots false 忽略 robots.txt(保持礼貌) -f, --force false 首先删除主机上的任何现有镜像 --chrome Chrome/Chromium 二进制文件的路径 kage clone --help 还有其他选项,包括渲染时间、并发和资产大小等的调整。提供 kage serve 运行一个小型静态文件服务器,通过克隆的文件夹,所以链接和资产以真实主机上的方式解析: kage serve $HOME /data/kage/paulgraham.com # 打开 http://127.0.0.

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡