微信公众号文章图片格式转换与下载(WeChat Official Account Articles Automatically Download Tools)

微信公众号文章图片格式转换与下载, ON/OFF按钮可选择是否浏览时自动下载图片, 并额外支持豆瓣B站站点webp/avif转jpg。

  1. // ==UserScript==
  2. // @name 微信公众号文章图片格式转换与下载(WeChat Official Account Articles Automatically Download Tools)
  3. // @author Lepturus
  4. // @description 微信公众号文章图片格式转换与下载, ON/OFF按钮可选择是否浏览时自动下载图片, 并额外支持豆瓣B站站点webp/avif转jpg。
  5. // @include *://mp.weixin.qq.com/*
  6. // @include *://mmbiz.qpic.cn/*
  7. // @include *://doubanio.com/*
  8. // @include *://*.douban.com/*
  9. // @include *://*.bilibili.com/read*
  10. // @grant GM_addStyle
  11. // @version 1.3
  12. // @namespace https://gf.qytechs.cn/users/213516
  13. // ==/UserScript==
  14. 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%}")
  15.  
  16. var imgs = document.getElementsByTagName("img")
  17.  
  18. // 微信公众号文章批量下载按钮
  19. if(document.getElementById('meta_content')){
  20. var dswitch = document.createElement ('label');
  21. dswitch.innerHTML = "<input id='d_switch' type='checkbox'><div class='slider round'><span class='on'>ON</span><span class='off'>OFF</span></div>";
  22. dswitch.setAttribute('class', 'switch');
  23. document.getElementById('meta_content').appendChild(dswitch);}
  24.  
  25. function downloadImg(url, name) {
  26. fetch(url).then(res => res.blob()).then((blob) => {
  27. const a = document.createElement('a');
  28. a.style.display = 'none';
  29. a.href = URL.createObjectURL(blob);
  30. a.download = name;
  31. document.body.appendChild(a);
  32. a.click();
  33. document.body.removeChild(a);
  34. });
  35. }
  36.  
  37.  
  38. function convert(){
  39. for (var i=0;i<imgs.length;i++)
  40. {
  41. // 转换是否为微信懒加载图片, jpeg&wxfrom=5&wx_lazy=1&wx_co=1
  42. if(imgs[i].src.includes('&wx_lazy')){
  43. // 图片转换为JPG
  44. imgs[i].src = imgs[i].src.replace(/&tp=webp&/g,"&tp=jpg&")
  45. if (document.getElementById("d_switch").checked){
  46. // 判断图片是否已下载
  47. imgs[i].src = imgs[i].src.replace(/&tp=jpg&.*/g,"")
  48. // s?__biz=MjM5MTEzODczMQ==&mid 为微信旧版URL
  49. let filename = document.URL.replace(/.*\/s\//,"").replace(/\?poc_token.*/,"").replace(/\?poc_token.*/,"").replace(/==&mid.*/,"").replace(/.*\?__biz=/,"")
  50. if(imgs[i].src.match(/wx_fmt=(.*)&wxfrom/)){
  51. downloadImg(imgs[i].src, filename + "_" + i.toString().padStart(2, '0') +"." + imgs[i].src.match(/wx_fmt=(.*)&wxfrom/)[1])}
  52. else{
  53. downloadImg(imgs[i].src, filename + "_" + i.toString().padStart(2, '0') +".jpg")
  54. }
  55. imgs[i].src = imgs[i].src.replace(/&wx_lazy/,"&wx_downloaded")
  56. }
  57. console.log(i,imgs[i].src)}
  58. if(imgs[i].src.includes('doubanio')&&imgs[i].src.includes('webp')){ // douban
  59. imgs[i].src = imgs[i].src.replace(/\.webp/g,".jpg")
  60. }
  61. if(imgs[i].src.includes('hdslb')){ // Bilibili
  62. //document.getElementsByTagName("img").forEach((ele) => { ele.src = ele.src.replace(/@.*\.avif/g,"")}); //replace avif extension
  63. imgs[i].src = imgs[i].src.replace(/\.webp/g,".jpg").replace(/@.*\.avif/g,"")
  64. }
  65. }
  66. }
  67. // 懒得用onload
  68. setInterval(convert,1000);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址