WechatWebpArchive

微信公众号文章辅助工具,可以提取公众号最短的链接,自动下载所有webp图片。

  1. // ==UserScript==
  2. // @name WechatWebpArchive
  3. // @namespace http://github.com/palhotel
  4. // @icon https://www.likeada.com/favicon.ico
  5. // @version 0.2
  6. // @description 微信公众号文章辅助工具,可以提取公众号最短的链接,自动下载所有webp图片。
  7. // @author palhotel
  8. // @match https://mp.weixin.qq.com/s*
  9. // @grant unsafeWindow
  10. // @require https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js
  11. // @license MIT
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. var elem = document.createElement('div');
  18. elem.style = 'position:fixed;top:10px;left:10px;width:100px;border:1px solid #1aad19;color:#laad19;text-align:center;padding: 2px;';
  19. elem.className = 'wechat-webp-archive';
  20.  
  21. /*
  22. * action: copy short url to clipboard
  23. */
  24. var hideElem = document.createElement('div');
  25. hideElem.style = 'width:0;height:0;z-index:-999;position:absolute;left:-2000px;top:-2000px;';
  26. hideElem.innerHTML = '<input id="wechat-webp-archive-hidden-input" value=""/>';
  27. elem.appendChild(hideElem);
  28.  
  29. var copyToClipboard = function(event){
  30. const input = document.querySelector('#wechat-webp-archive-hidden-input');
  31. input.select();
  32. if (document.execCommand('copy')) {
  33. alert('已复制到剪贴板');
  34. }
  35. }
  36. var copyShortLink = function(event){
  37. var url = location.href;
  38. if(url.startsWith('https://mp.weixin.qq.com/s/')){
  39. const input = document.querySelector('#wechat-webp-archive-hidden-input');
  40. input.value = url;
  41. copyToClipboard();
  42. return;
  43. }
  44. var segs = url.split('&');
  45. var collected = [];
  46. collected.push(segs[0]);
  47. for(var i = 1; i < segs.length; i++){
  48. if(segs[i].startsWith('mid=') || segs[i].startsWith('idx=') || segs[i].startsWith('sn=')){
  49. collected.push(segs[i]);
  50. } else {
  51. continue;
  52. }
  53. }
  54. var newurl = collected.join('&');
  55. const input = document.querySelector('#wechat-webp-archive-hidden-input');
  56. input.value = newurl;
  57. console.log(newurl);
  58. copyToClipboard();
  59. };
  60.  
  61. var button = document.createElement('button');
  62. button.style = 'width: 80%;height:32px;line-height:16px;padding:1px;background:#1aad19;color:#ffffff;border:none;'
  63. button.textContent = "精简URL";
  64. button.style.borderRadius = "4px";
  65. button.addEventListener("click", copyShortLink);
  66.  
  67. function zipImages() {
  68. var zip = new JSZip();
  69. var canvas = document.createElement('canvas');
  70. var ctx = canvas.getContext('2d');
  71. var imgElems = document.querySelectorAll('img[data-src].rich_pages.wxw-img');
  72. // Loop through all images and add them to zip file
  73. const promises = [];
  74.  
  75. for (let i = 0; i < imgElems.length; i++) {
  76. var img = imgElems[i];
  77. var attrs = img.attributes;
  78. let realUrl = '';
  79. let imgType = '';
  80. for(let j = 0; j < attrs.length; j++){
  81. if(attrs[j].name === 'data-type'){
  82. imgType = attrs[j].value;
  83. } else if(attrs[j].name === 'data-src'){
  84. realUrl = attrs[j].value;
  85. }
  86. }
  87. console.log(realUrl);
  88.  
  89. promises.push(fetch(realUrl).then(response => response.blob()).then(blob => {
  90. zip.file('image' + i + '.' + imgType, blob);
  91. return i;
  92. }));
  93. }
  94.  
  95. Promise.all(promises).then((blobs) => {
  96. // Generate zip file and download it
  97. zip.generateAsync({type:"blob"}).then(function(content) {
  98. var link = document.createElement('a');
  99. link.href = URL.createObjectURL(content);
  100. link.download = 'images.zip';
  101. link.click();
  102. });
  103. });
  104. }
  105. /*
  106. * action: download pictures archive
  107. */
  108. var buttonImg = document.createElement('button');
  109. buttonImg.style = 'margin-top:2px;width: 80%;height:32px;line-height:16px;padding:1px;background:#1aad19;color:#ffffff;border:none;'
  110. buttonImg.textContent = "所有图片";
  111. buttonImg.style.borderRadius = "4px";
  112. buttonImg.addEventListener("click", zipImages);
  113.  
  114. elem.appendChild(button);
  115. elem.appendChild(buttonImg);
  116. document.getElementsByTagName('body')[0].appendChild(elem);
  117.  
  118.  
  119. })();

QingJ © 2025

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