最近在这个看图的时代,收集素材成了我们日常的一部分。特别是看到一些设计精美的公众号文章,里面的配图简直让人爱不释手。但是,咱们都知道微信公众号的机制有点“坑”,想保存在本地,要么用手机一张张长按,要么在电脑上右键另存为,几十张图下来,手指都点麻了。

保存微信文章图片的繁琐操作示意图

手动保存微信文章图片的繁琐过程

作为一个喜欢折腾的技术党,这种重复性劳动必须得想办法自动化解决!今天就给大伙安利一个超好用的油猴脚本源码,专门用来批量下载微信公众号文章里的图片。这不仅仅是下载,它在细节上处理得非常到位,比如自动限速防止被浏览器拦截、根据文件头信息智能识别图片格式等,都是实打实的“干活”。

为什么要有这个脚本?

市面上类似的工具其实不少,但很多要么用起来太复杂,要么就是单纯爬取页面 DOM,容易漏图或者把无关的头像也下载下来。这个脚本的逻辑就更聪明一点:

  1. 双重保障获取图片源:它优先尝试读取微信底层数据对象 cgiDataNew,这通常是最高清、最完整的图片列表。如果读取不到(比如某些特殊排版),它才会退一步去扫描正文区域的 img 标签。这种“降级策略”保证了绝大多数情况下都能精准抓图。
  2. 防刷屏设计(限速机制):如果你一次性连续触发几十个下载请求,现代浏览器很可能会认为这是恶意行为而直接拦截。这个脚本专门加了一个 DOWNLOAD_INTERVAL 参数(默认 400毫秒),每下一张图稍微喘口气,既稳又不慢。
  3. 格式不迷路:有时候微信图片链接里的后缀并不一定真实,脚本会先 fetch 图片二进制流,读取 Content-Type 来判断到底是 jpg、png 还是 webp,确保保存下来的文件能正常打开。

核心功能拆解

油猴插件安装与使用界面

油猴插件安装界面示意图

这块咱们简单过下代码逻辑,方便懂行的朋友自己魔改。

脚本的核心在于 getImageList 函数。它首先检查全局变量 window.cgiDataNew。在一般的微信文章页面中,这个变量里藏着 picture_page_info_list,里面全是高清大图 CDN 链接。这一步走通,效率最高。

如果第一步落空,脚本就会去抓取 #js_content 容器里的图片。这里有个小细节,微信图片常用 data-src 进行懒加载,直接读 src 可能是空的或者只是一像素的占位图,所以代码里特意写了 img.getAttribute('data-src') || img.src,非常细心。

下载环节 downloadImage 也很稳健。它把链接强制转为 HTTPS,通过 fetch 拉取数据转成 Blob 对象,然后利用 URL.createObjectURL 生成临时的浏览器内部链接,最后通过动态创建一个 <a> 标签并模拟点击来实现下载。下载完还不忘清理内存 URL.revokeObjectURL,代码习惯相当好。

如何安装使用?

别看源码长,用起来其实就三步,小白也能轻松搞定:

  1. 安装油猴插件:首先你的浏览器得装好 Tampermonkey(暴力猴)扩展。Chrome、Edge 都能用,去应用商店搜一下就行。
  2. 新建脚本:点击油猴图标,选择“添加新脚本”。把页面里的代码全选复制,粘贴到编辑器里,保存(Ctrl+S)。
  3. 直接去用:打开任意一篇微信公众号文章。你会发现页面右侧悬浮出现了一个绿色的按钮,写着“下载所有图片”。一点,坐等下载就行!按钮上还会显示进度,比如“下载中 5/20”,下载完成后还会弹个窗告诉你成功失败了几张。

可能遇到的小问题(FAQ)

Q: 点了按钮没反应? A: 刷新一下页面试试,特别是刚安装脚本后。另外确认一下 URL 是否匹配,如果有些特殊的微信文章链接不是 /s/ 开头,可能需要手动修改脚本头部的 @match 规则。

Q: 下载的图片文件名太乱? A: 默认命名是 wx_img_1.jpg 这种格式。如果你想要更有意义的名字,可以在 downloadImage 函数里修改 filenameBase 的逻辑,比如尝试从图片周围抓取文字作为文件名(不过这个改动涉及 DOM 分析,难度会大一点)。

Q: 下载速度太慢了? A: 代码里默认间隔是 400毫秒。如果你网速快且不想等,可以找到源码开头的 const DOWNLOAD_INTERVAL = 400;,把它改成 100 或者 50。不过改太低了容易被浏览器叫停,建议适度调整。

写在最后

这个脚本非常轻量,没有多余的广告或者推广,纯粹为了解决下载痛点而写。对于我们经常需要存图做设计、写报告或者归档资料的朋友来说,绝对是一个提升效率的神器。赶紧去试试吧,把那些好图一键收入囊中!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭