ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

kage:一行命令把任意网站存进硬盘,还能离线打开——无头浏览器本地快照工具完整上手指南 kage一行命令把任意网站存进硬盘还能离线打开——无头浏览器本地快照工具完整上手指南【免费下载链接】kageShadow any website for offline viewing, with the JavaScript stripped out项目地址: https://gitcode.com/gh_mirrors/kage6/kagekage是一个开源的本地网站快照工具用一行命令驱动无头浏览器渲染整个网站剥掉全部 JavaScript把页面、CSS、图片、字体全部下载到本地硬盘得到一个可以离线打开、零代码执行的网站镜像。无论是坐飞机、断网、还是给十年后的自己存一份备份这份完整指南带你快速上手。为什么另存为总是失败你肯定遇到过点Save As存下一页六个月后打开是空白或永远转圈。原因很简单——现代网站不是一个文档而是一段程序。服务器发出的 HTML 往往只是个空壳你看到的页面是浏览器里的 JavaScript 现场拼出来的。另存为存到的是空壳而不是页面。kage 走了另一条路渲染用真实的无头 Chrome 打开每个页面等网络安静下来抓取 JavaScript 执行完毕后的最终 DOM——和你打开检查看到的一模一样剥离删掉所有script标签、onclick等事件处理器、javascript:链接让页面彻底失去行动能力本地化下载全部样式表、图片、字体把引用改写成本地路径结果就是落盘的页面看起来和线上完全一样但不运行任何代码、不发任何网络请求、不追踪任何东西。核心流程实现见 introduction.md。一键安装步骤kage 是单个二进制文件安装方式任选其一# Go 用户 go install github.com/tamnd/kage/cmd/kagelatest # 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 200kage 天生礼貌默认遵守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 后它会调用操作系统原生的 WebViewmacOS 的 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),仅供参考
返回列表