Free Yun Keys

免掉百度网盘写密码的麻烦,包括解析短网址和跳转链接,多链接支持

当前为 2021-03-08 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Free Yun Keys
  3. // @name:zh 免密百度网盘
  4. // @namespace http://zszen.github.io/
  5. // @version 6.1
  6. // @description 免掉百度网盘写密码的麻烦,包括解析短网址和跳转链接,多链接支持
  7. // @author Zszen John
  8. // @grant GM.getValue
  9. // @grant GM.setValue
  10. // @grant GM.deleteValue
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_xmlhttpRequest
  14. // @match https://www.lookae.com/*
  15. // @match https://www.soft5566.com/*
  16. // @match https://pan.baidu.com/*
  17. // @include https://*
  18. // @include http://*
  19. // @note 2021.03-07 v6.0 优化了解析,准确解析lookae和ali213,其他的网站暂时使用父级搜索
  20. // @note 2020.07-26 v5.0 添加回对二次跳转的非百度云链接进行解析
  21. // @note 2020.07-24 v4.0 支持自动下载,可按钮切换
  22. // @note 2020.07-23 v3.0 修复错误, 去掉jquery
  23. // @note 2020.07-21 v1.0 初步支持自动跳转,自动解析链接
  24. // ==/UserScript==
  25.  
  26. (function() {
  27. 'use strict';
  28. var label = 'Zszen '
  29. var isAutoDownload = true;
  30. var regexp_codeback = /#([a-zA-Z0-9]{4})/
  31. //var regexp_code = /(码|问)[\s|:|:]*([a-zA-Z0-9]{4})/
  32. var regexp_code = /(提取码|密码)[\s|:|:]*([a-zA-Z0-9]{4})/
  33. var regexp_url = /(https:\/\/pan.baidu.com\/.*?\/(\d|\w|-)+)/
  34. var url = window.location.href;
  35. var res = /\/\/(.+?\..*?)(\/|\?)/.exec(url);
  36. var site = res[1];
  37. if(site=="pan.baidu.com"){//parse
  38. var pss = regexp_codeback.exec(url);
  39. var inputs = ELs('input');
  40. var as = ELs('a', el=>el.textContent.indexOf('提取文件')>=0);
  41. if(pss!=null && pss.length>1 && inputs.length>0 && as.length>0){
  42. console.log(label,'pan get');
  43. inputs[0].value = pss[1];
  44. as[0].click()
  45. }else{
  46. console.log(label,'pan download');
  47. //<a class="g-button" data-button-id="b7" data-button-index="4" href="javascript:;" title="举报"><span class="g-button-right"><span class="text" style="width: auto;">举报</span></span></a>
  48. //ELs('a',el=>{return el.title=='举报'}, el=>el.style.display = 'none');
  49. var check_simbols = ['x','v']
  50. ELs('a',el=>{return el.title.indexOf('保存到手机')>=0}, el=>{
  51. var bl = GM_getValue("auto_download")
  52. var a = document.createElement('a');
  53. a.className = 'g-button autodownload'
  54. a.href="javascript:;"
  55. a.title="["+check_simbols[bl?1:0]+"]自动下载";
  56. var span = document.createElement('span')
  57. span.className = 'g-button-right'
  58. a.appendChild(span)
  59. var span2 = document.createElement('span')
  60. span2.className = 'text'
  61. span2.style.width = 'auto'
  62. span.appendChild(span2);
  63. span2.textContent = a.title
  64. el.parentElement.insertBefore(a, el.nextElementSibling)
  65. //
  66. a.addEventListener('click',()=>{
  67. var bl = GM_getValue("auto_download")
  68. if(bl==null)bl=false;
  69. bl = !bl;
  70. GM_setValue("auto_download", bl)
  71. a.title="["+check_simbols[bl?1:0]+"]自动下载";
  72. span2.textContent = a.title
  73. });
  74. })
  75. setTimeout(()=>{
  76. var bl = GM_getValue("auto_download")
  77. if(bl!=true){
  78.  
  79. return;
  80. }
  81. var ads = ELs('a', el=>{return el.title=='下载'});
  82. if(ads.length>0){
  83. var sels = ELs('span', el=>el.className == 'EOGexf');
  84. for(var i=0; i<sels.length; i++){
  85. sels[i].click();
  86. }
  87. ads[0].click();
  88. }else{
  89. ELs('a', el=>{return el.title.indexOf('下载')>=0})[0].click();
  90. }
  91. }, 1000);
  92. }
  93. }else{//deal
  94. console.log(label,'pan find');
  95. ELs('a',
  96. (el)=>{
  97. if(!regexp_url.test(el.href)){
  98. return false;
  99. }
  100. var res = false;
  101. try{
  102. res = regexp_code.test(el.parentElement.textContent)
  103. if(res)return res;
  104. }catch(e){
  105. }
  106. try{
  107. res = regexp_code.test(el.textContent)
  108. if(res)return res;
  109. }catch(e){
  110. }
  111. try{
  112. res = regexp_code.test(el.nextSibling.textContent)
  113. if(res)return res;
  114. }catch(e){
  115. }
  116. return false;
  117. },
  118. el=>{
  119. //var ps = regexp_code.exec(el.parentElement.textContent)
  120. var ps = [];
  121. if(site=="www.lookae.com"){//parse
  122. ps = regexp_code.exec(el.nextSibling.textContent)
  123. }else if(site=="www.soft5566.com"){//parse ali213
  124. ps = regexp_code.exec(el.textContent)
  125. }else{
  126. ps = regexp_code.exec(el.textContent);
  127. if(ps.length<3){
  128. ps = regexp_code.exec(el.nextSibling.textContent);
  129. }
  130. if(ps.length<3){
  131. ps = regexp_code.exec(el.parentNode.textContent);
  132. }
  133. }
  134. if(ps.length>=3){
  135. if(regexp_url.test(el.href)){
  136. el.href=el.href+'#'+ps[2]
  137. }else{
  138. GM_xmlhttpRequest({
  139. method: "GET",
  140. url: el.href,
  141. onload: (res)=>{
  142. //console.log(res.responseText);
  143. var urls = regexp_url.exec(res.responseText);
  144. if(urls && urls.length>1){
  145. el.href=urls[1]+'#'+ps[2];
  146. }
  147. }
  148. });
  149. }
  150. }
  151. });
  152. }
  153.  
  154. //
  155. function ELs(tagName, conditionFun, dealFun, parent){
  156. if(parent==null) parent = document;
  157. var tags = [...parent.getElementsByTagName(tagName)];
  158. if(conditionFun){
  159. tags = tags.filter(conditionFun);
  160. }
  161. if(dealFun){
  162. tags.forEach(dealFun);
  163. }
  164. return tags;
  165. }
  166.  
  167. //DivMaker('<a class="aaa" href="123">asdfasdf <h1></a>', 'height:100px', 'a.aaa { color: green; }')
  168. function DivMaker(innerHtml, styleString, cssString){
  169. var divNode = document.createElement("div");
  170. divNode.innerHTML = innerHtml;
  171. document.body.appendChild(divNode);
  172. if(styleString){
  173. divNode.style = styleString;
  174. }
  175. if(cssString){
  176. var style = document.createElement('style');
  177. style.appendChild(document.createTextNode(cssString));
  178. divNode.appendChild(style);
  179. }
  180. }
  181.  
  182. })();