wget 能离线打开的最小可靠组合是 --page-requisites --convert-links --no-clobber --restrict-file-names=windows;它下载html及依赖资源并重写链接为本地路径,双击即可打开。

用 wget 下载 HTML 源码并保留可离线打开的结构
直接 wget 不加参数,只会保存一个空壳 .html 文件,点开全是 404——因为 CSS、JS、图片全没下载。关键不是“能不能下”,而是“怎么下才能双击就打开”。
-
wget -O page.html https://example.com:只存 HTML 文本,最简但最不可用 -
wget --page-requisites --convert-links --no-clobber --restrict-file-names=windows https://example.com:这才是能离线打开的最小可靠组合
—--page-requisites强制拉取link、script、img的引用资源
—--convert-links把https://example.com/style.css改成style.css,本地路径才有效
—--no-clobber避免重复覆盖已下载文件,适合断点续抓 - 遇到 CDN 资源(如
https://cdn.jsdelivr.net/...)默认不下载,得加--span-hosts --domains=example.com,cdn.jsdelivr.net - 如果页面依赖登录态或 Cookie,先用浏览器导出
cookies.txt,再加--load-cookies cookies.txt
用 curl 获取原始服务端返回的 HTML(绕过浏览器渲染)
curl 不处理链接重写、不下载依赖,但它最干净——你拿到的就是服务器吐出来的第一份字节流,适合做 SEO 审查、备案存档或比对 SSR 输出。
-
curl -o page.html https://example.com:基础用法,但可能被反爬拦截 -
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -H "Accept: text/html" -o page.html https://example.com:加标准请求头,降低 403 概率 -
curl -b "sessionid=abc123;" -o page.html https://example.com/dashboard:带 Cookie 访问需鉴权的页面 - 注意:
curl不会执行 JS,也不修正编码;若响应头缺失Content-Type: text/html; charset=utf-8,中文可能乱码,此时需手动指定-w "%{content_type}"查看实际编码
Save Page WE 浏览器插件:一键保存含 JS 渲染后 DOM 的 HTML
它不是下载原始源码,而是把当前标签页的 document.documentElement.outerHTML 序列化后打包成单个 .html 文件——适合 Vue/React 页面,但会丢失原始注释、doctype 缩进,且无法还原未挂载的组件模板。
- 安装后点击图标 → “Save as HTML” 即可,生成的文件内联了大部分 CSS/JS(转为
<style></style>和<script></script>),图片转为 base64 或相对路径 - 对 Shadow DOM、
iframe内容、Service Worker 缓存内容支持有限,部分动态插入的节点可能漏掉 - 不能保存跨域
iframe内容(受同源策略限制),控制台会报SecurityError - 生成的文件体积通常比原始 HTML 大 2–5 倍,不建议用于长期归档,仅作临时调试快照
Puppeteer 脚本导出完整渲染 HTML(适合自动化与 CI 场景)
当你要批量抓取登录后页面、带滚动懒加载的列表、或需要等待特定元素出现时,puppeteer 是目前最可控的选择——但它不是“一键工具”,是写代码的事。
- 核心逻辑:启动无头 Chrome →
goto页面 →waitForSelector等待关键内容 →page.content()获取最终 DOM → 写入文件 - 示例关键行:
await page.goto('https://example.com', { waitUntil: 'networkidle0' }); const html = await page.content(); fs.writeFileSync('rendered.html', html); - 必须处理超时、弹窗、证书错误(
ignoreHTTPSErrors: true)、用户登录态(page.authenticate()或注入 Cookie) - 性能开销大,单页耗时通常在 1–3 秒;并发抓取需控制
browser.launch({ headless: true, args: ['--no-sandbox'] })实例数,否则内存爆满
真正难的不是选哪个工具,而是分清你要的是“服务器发出来的原始 HTML”,还是“浏览器执行 JS 后长成的那个样子”——前者决定 SEO 和首屏速度,后者决定用户实际看到的内容。混淆这两者,所有下载结果都会在某个环节失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











