为什么“另存为”常常不完整
浏览器右键“网页另存为”看似简单,实际只保存当前 DOM 快照。CSS、JS、图片、字体等外部资源若路径失效或未下载,离线打开就会样式错乱、交互失灵。要获得真正可用的完整源码,需要把资源一并抓取并修正引用路径。
三种常用下载方式
1. 浏览器开发者工具
打开 F12,切换到 Network 面板,勾选 Disable cache 后刷新页面。右键任意请求选择“Save all as HAR”可拿到请求清单,但 HAR 不是可运行源码。更实用的是 Sources 面板,可逐个保存 JS、CSS 文件,适合调试单个脚本。
2. 命令行工具 wget
wget 适合静态站点批量抓取:
wget –mirror –convert-links –adjust-extension \
–page-requisites –no-parent https://example.com
--mirror 开启镜像,--convert-links 把链接改为相对路径,--page-requisites 下载页面所需图片、样式等。缺点是遇到 JavaScript 渲染的内容无法执行。
3. 单文件归档工具
SingleFile 浏览器扩展能把整页资源内联进一个 HTML 文件,打开即用,适合保存文章、文档。命令行可用 single-file CLI 批量处理。若需长期归档,可配合 Wayback Machine 的“Save Page Now”生成可访问快照。
动态渲染页面怎么办
很多现代网站内容由 JS 异步加载,wget 抓到的只是空壳。此时需要无头浏览器,例如 Playwright 或 Puppeteer,等待网络空闲后再保存:
await page.goto(url, { waitUntil: ‘networkidle’ });
await page.content(); // 获取渲染后的 HTML
同时监听 response 事件,把 JS、图片等资源按 URL 落盘,再重写 HTML 中的引用。
相对路径与跨域资源
下载后若样式丢失,先检查 标签和资源路径。用 --convert-links 或脚本把绝对路径改成相对路径。跨域字体、CDN 脚本可能因防盗链失败,可在请求头加 Referer 或 User-Agent 重试。注意:抓取前确认目标站点条款与 robots.txt,仅用于个人学习或授权归档,不要用于商业分发。
小结
完整网页源码下载的核心是“页面 + 依赖资源 + 路径修正”。静态页用 wget,单页归档用 SingleFile,动态页用无头浏览器。三者按场景组合,基本能覆盖大多数需求。

