寂月download

寂月神社图片预览下使用的是复用页面,分辨率为300x300,本脚本为自动访问分辨率高的地址并下载图片。

  1. // ==UserScript==
  2. // @name 寂月download
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description 寂月神社图片预览下使用的是复用页面,分辨率为300x300,本脚本为自动访问分辨率高的地址并下载图片。
  6. // @description v0.1版本进入页面后点击“获取”按钮,提示获取完成后点击“下载”按钮;目前仅能同时下载58张以下的图片。
  7. // @description v0.2版本进入页面后点击“获取”按钮,提示获取完成后点击“下载”按钮;目前由于服务器访问数量限制,超过59页将会以一页/s的速度访问(会消耗大量浏览器资源)。
  8. // @description v0.3版本去掉下载按钮,获取链接后自动下载;针对图片过多会某些图片下载失败新增校验按钮,在浏览器无反应后点击校验来查看是否失败(有失败则重新点击获取按钮下载,删掉重复图片即可)。
  9. // @description 本脚本不可用于商业行为,仅限交流自用!
  10. // @author 香香不吃饭
  11. // @match https://www.jiyue.pro/*
  12. // @require http://code.jquery.com/jquery-1.11.0.min.js
  13. // @require https://cdn.bootcss.com/FileSaver.js/1.3.8/FileSaver.min.js
  14. // @grant GM_info
  15. // @grant GM_registerMenuCommand
  16. // @grant GM_xmlhttpRequest
  17. // @grant GM_download
  18. // @grant GM_log
  19. // ==/UserScript==
  20.  
  21. (function() {
  22. 'use strict';
  23.  
  24. //创建隐藏a标签
  25. //var elea = document.createElement("a");
  26. //elea.setAttribute("id", "a");
  27. //elea.textContent="值";
  28. //elea.setAttribute("href", "www.baidu.com");
  29.  
  30.  
  31. //创建一个img标签
  32. //var eleimg = document.createElement("img");
  33. //eleimg.setAttribute("id", "img");
  34. // eleimg.textContent="值";
  35. //eleimg.setAttribute("class", "img-fluid lazyloaded");
  36.  
  37. //创建数组来存储每张图片对应的src
  38. var imgUrl = [];
  39.  
  40. //创建下载超时回调数组
  41. var timeOutArr = [];
  42.  
  43. //创建下载失败回调数组
  44. var onErrorArr = [];
  45.  
  46. var button = document.createElement("button"); //创建一个获取图片url按钮
  47. button.setAttribute("id", "btn");
  48. button.setAttribute("type", "button");
  49. button.textContent="获取";
  50. button.style.background = "#b46300";
  51. button.style.color = "white";
  52. button.style.cssText="padding:4px 0;position: absolute;top:-1px;right:45px;width:40px;height:35px";
  53.  
  54. var button2 = document.createElement("button"); //创建一个校验图片按钮
  55. button2.setAttribute("id", "btn2");
  56. button2.setAttribute("type", "button");
  57. button2.textContent="校验";
  58. button2.style.background = "#b46300";
  59. button2.style.color = "white";
  60. button2.style.cssText="padding:4px 0;position: absolute;top:-1px;right:0px;width:40px;height:35px";
  61.  
  62. var testdiv = document.getElementById("navbarNav");
  63. testdiv.appendChild(button);
  64. testdiv.appendChild(button2);
  65. //testdiv.appendChild(elea);
  66. //elea.appendChild(eleimg);
  67.  
  68. //eleimg.style.display="none";
  69.  
  70. //document.getElementById("elea").style.display="none";
  71.  
  72. var newurl = "";
  73. var pagenum = 0; //图片页数
  74. var imgname = ''; //漫画名称
  75.  
  76. var x = 1;
  77.  
  78. //拿到当前页面所有预览图片对应的URL
  79. var baseUrl = window.location.href;
  80.  
  81. button.onclick = function getimgurl(){
  82. alert("开始获取")
  83. pagenum = document.getElementsByClassName('badge badge-pill badge-secondary float-right')[0].innerText;
  84. pagenum = pagenum.substr(0,pagenum.length-1);
  85. imgname = document.getElementsByClassName('h4 font-weight-bold title mb-2')[0].innerText;
  86.  
  87. //eleimg.setAttribute("alt",imgname);
  88.  
  89. if(pagenum>59){
  90. sleep(1000);
  91. }else{
  92. for(let i = 1;i<=pagenum;i++) {
  93. newurl = baseUrl + '/'+i
  94. geturl();
  95. }
  96. }
  97.  
  98. alert("共获取"+pagenum+"页!开始下载!")
  99. //console.log(imgUrl)
  100.  
  101. downloadimg();
  102.  
  103. }
  104.  
  105. function sleep(n){
  106. if(x <= pagenum){
  107. newurl = baseUrl + '/'+x
  108. //console.log(x)
  109. geturl();
  110. x = x+1
  111.  
  112. var start = new Date().getTime();
  113. // console.log('休眠前:' + start);
  114. while (true) {
  115. if (new Date().getTime() - start > n) {
  116. break;
  117. }
  118. }
  119. // console.log('休眠后:' + new Date().getTime());
  120. sleep(1000);
  121.  
  122. }else{
  123. console.log("获取完成!")
  124. }
  125.  
  126.  
  127. }
  128.  
  129.  
  130.  
  131. //ajax同步请求获取url
  132. function geturl(){
  133. $.ajax({
  134. type:'get',
  135. url:newurl,//这里是url
  136. async: false,
  137. //data就是内容了,也就是url网页中的内容
  138. success:function(data){
  139. //正则表达式截取图片url
  140. var srcReg = /"(.*?)"/g
  141. var arr = data.match(srcReg)[162]
  142. arr = arr.substr(1,arr.length-2)
  143.  
  144. imgUrl.push(arr)
  145. //console.log(arr)
  146.  
  147.  
  148. }
  149. });
  150. }
  151.  
  152. function downloadimg(){
  153. alert("开始下载!")
  154. for(let a=0;a<=imgUrl.length-1;a++){
  155. GM_download({
  156. url:imgUrl[a],
  157. name:"picture"+a,
  158. onload:function(){
  159. console.log("下载第"+(a+1)+"张成功!")
  160. },
  161. onerror:function(e){
  162. console.log("下载第"+(a+1)+"张失败!")
  163. console.log(e)
  164. onErrorArr.push(imgUrl[a])
  165. },
  166. ontimeout: function(){
  167. console.log("下载第"+(a+1)+"张超时!")
  168. timeOutArr.push(imgUrl[a])
  169. },
  170. onprogress:function(e){
  171. //console.log(e)
  172. }
  173. })
  174. }
  175.  
  176. // GM_download(imgUrl[6],"picture"+6);
  177. // GM_download(imgUrl[8],"picture"+8);
  178. // GM_download(imgUrl[9],"picture"+9);
  179. // GM_download(imgUrl[11],"picture"+11);
  180. // GM_download(imgUrl[17],"picture"+17);
  181. // GM_download(imgUrl[18],"picture"+18);
  182. // GM_download(imgUrl[20],"picture"+20);
  183. // GM_download(imgUrl[33],"picture"+33);
  184. // GM_download(imgUrl[40],"picture"+40);
  185. // GM_download(imgUrl[41],"picture"+41);
  186. // GM_download(imgUrl[42],"picture"+42);
  187. // GM_download(imgUrl[45],"picture"+45);
  188. // GM_download(imgUrl[46],"picture"+46);
  189. // GM_download(imgUrl[47],"picture"+47);
  190. // GM_download(imgUrl[48],"picture"+48);
  191. // GM_download(imgUrl[49],"picture"+49);
  192.  
  193.  
  194. //GM_download(imgUrl[0],"aaa");
  195.  
  196. }
  197.  
  198.  
  199. button2.onclick = function checkfailed(){
  200. if(!onErrorArr.length == 0){
  201. alert("有"+onErrorArr.length+"条图片下载失败!")
  202. }else{
  203. alert("未检测到下载失败图片!")
  204. }
  205. if(!timeOutArr.length == 0){
  206. alert("有"+timeOutArr.length+"条图片下载超时!")
  207. }else{
  208. alert("未检测到下载超时图片!")
  209. }
  210.  
  211.  
  212. }
  213.  
  214.  
  215.  
  216. //alert("获取完成!")
  217.  
  218. // Your code here...
  219. })();