微信公众号文章图片格式转换与下载, ON/OFF按钮可选择是否浏览时自动下载图片, 并额外支持豆瓣B站站点webp/avif转jpg。
// ==UserScript== // @name 微信公众号文章图片格式转换与下载(WeChat Official Account Articles Automatically Download Tools) // @author Lepturus // @description 微信公众号文章图片格式转换与下载, ON/OFF按钮可选择是否浏览时自动下载图片, 并额外支持豆瓣B站站点webp/avif转jpg。 // @include *://mp.weixin.qq.com/* // @include *://mmbiz.qpic.cn/* // @include *://doubanio.com/* // @include *://*.douban.com/* // @include *://*.bilibili.com/read* // @grant GM_addStyle // @version 1.3 // @namespace https://greasyfork.org/users/213516 // ==/UserScript== GM_addStyle(".switch{position:relative;width:45px;height:17px;margin-bottom:-2px;display:inline-block} .switch input{display:none}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ca2222;transition:.4s}.slider:before{position:absolute;content:'';height:13px;width:13px;left:2px;bottom:2px;background-color:#fff;transition:.4s}input:checked+.slider{background-color:#2ab934}input:checked+.slider:before{transform:translateX(28px)}.on{display:none}.off,.on{color:#fff;position:absolute;transform:translate(-50%,-50%);top:50%;left:50%;font-size:8px}input:checked+.slider .on{display:block} input:checked+.slider .off{display:none}.slider.round{border-radius:17px}.slider.round:before{border-radius:50%}") var imgs = document.getElementsByTagName("img") // 微信公众号文章批量下载按钮 if(document.getElementById('meta_content')){ var dswitch = document.createElement ('label'); dswitch.innerHTML = "<input id='d_switch' type='checkbox'><div class='slider round'><span class='on'>ON</span><span class='off'>OFF</span></div>"; dswitch.setAttribute('class', 'switch'); document.getElementById('meta_content').appendChild(dswitch);} function downloadImg(url, name) { fetch(url).then(res => res.blob()).then((blob) => { const a = document.createElement('a'); a.style.display = 'none'; a.href = URL.createObjectURL(blob); a.download = name; document.body.appendChild(a); a.click(); document.body.removeChild(a); }); } function convert(){ for (var i=0;i<imgs.length;i++) { // 转换是否为微信懒加载图片, jpeg&wxfrom=5&wx_lazy=1&wx_co=1 if(imgs[i].src.includes('&wx_lazy')){ // 图片转换为JPG imgs[i].src = imgs[i].src.replace(/&tp=webp&/g,"&tp=jpg&") if (document.getElementById("d_switch").checked){ // 判断图片是否已下载 imgs[i].src = imgs[i].src.replace(/&tp=jpg&.*/g,"") // s?__biz=MjM5MTEzODczMQ==&mid 为微信旧版URL let filename = document.URL.replace(/.*\/s\//,"").replace(/\?poc_token.*/,"").replace(/\?poc_token.*/,"").replace(/==&mid.*/,"").replace(/.*\?__biz=/,"") if(imgs[i].src.match(/wx_fmt=(.*)&wxfrom/)){ downloadImg(imgs[i].src, filename + "_" + i.toString().padStart(2, '0') +"." + imgs[i].src.match(/wx_fmt=(.*)&wxfrom/)[1])} else{ downloadImg(imgs[i].src, filename + "_" + i.toString().padStart(2, '0') +".jpg") } imgs[i].src = imgs[i].src.replace(/&wx_lazy/,"&wx_downloaded") } console.log(i,imgs[i].src)} if(imgs[i].src.includes('doubanio')&&imgs[i].src.includes('webp')){ // douban imgs[i].src = imgs[i].src.replace(/\.webp/g,".jpg") } if(imgs[i].src.includes('hdslb')){ // Bilibili //document.getElementsByTagName("img").forEach((ele) => { ele.src = ele.src.replace(/@.*\.avif/g,"")}); //replace avif extension imgs[i].src = imgs[i].src.replace(/\.webp/g,".jpg").replace(/@.*\.avif/g,"") } } } // 懒得用onload setInterval(convert,1000);