Pixiv Lazy plus

provide a direct link to original image ([s] link).

  1. // ==UserScript==
  2. // @name Pixiv Lazy plus
  3. // @namespace pixivlazyplus
  4. // @description provide a direct link to original image ([s] link).
  5. // @license Public Domain
  6. // @version 0.9.0.23
  7. // @include http://www.pixiv.net/*
  8. // @include https://www.pixiv.net/*
  9. // @include https://accounts.pixiv.net/*
  10. // @grant GM_getValue
  11. // @grant GM_setValue
  12. // @grant GM_xmlhttpRequest
  13. // @grant GM_log
  14. // @grant GM_registerMenuCommand
  15. // ==/UserScript==
  16. // version 0.9.0.23 - adapted for new index page layout
  17. // version 0.9.0.22 - go back to probing due to low rate limit of ajax api (it doesn't probe ugoira properly at the moment)
  18. // version 0.9.0.21 - switch to ajax api (https://github.com/danbooru/danbooru/blob/39cc3ed5cf913499093d2f641d70d7682a14fa42/app/logical/pixiv_ajax_client.rb)
  19. // version 0.9.0.20 - tried to take care refresh_token, and overhual non-app-api version of parsing code (as urgency relief)
  20. // version 0.9.0.19 - followup https://github.com/upbit/pixivpy/issues/83#issuecomment-527232396
  21. // version 0.9.0.18 - fix medium page neighbor illust direct links
  22. // version 0.9.0.17 - fix medium page list after server side version up
  23. // version 0.9.0.16 - fix medium page after server side version up
  24. // version 0.9.0.15 - fix fetching preview urls, add a button for manual generating source links
  25. // version 0.9.0.14 - use data-src and always post-processing
  26. // version 0.9.0.13 - fix OAuth login detection URL, turn pixiv-dic URL into tag-searching URL
  27. // version 0.9.0.12 - try to auto login with tags.php ifreame reloading
  28. // version 0.9.0.11 - fix ranking [s] link attachment
  29. // version 0.9.0.10 - resize images in manga view
  30. // version 0.9.0.9 - fix for elimination of public API me.json
  31. // version 0.9.0.8 - add Auto Login menu item
  32. // version 0.9.0.7 - more fix of cookie issue
  33. // version 0.9.0.6 - fix cookie issue
  34. // version 0.9.0.5 - fix ugoira link again
  35. // version 0.9.0.4 - restore MangaFull function
  36. // version 0.9.0.3 - fix clearing accessToken logic, add function to check if accessToken is still valid
  37. // version 0.9.0.2 - fix ugoira link
  38. // version 0.9.0.1 - disable MangaFull since pixiv checks referer for full size manga pages now.
  39. // version 0.9 - upgrade to OAuth API + Pixiv Public API
  40. // version 0.8.14.1 - fix new medium page layout
  41. // version 0.8.13 - fix image response lazy link position
  42. // version 0.8.12 - fix mypage right side lazy links
  43. // version 0.8.11 - fix double links in medium page
  44. // version 0.8.10 - fix double links in medium page
  45. // version 0.8.9 - append [U] link after canvas
  46. // version 0.8.8 - fix loading big manga URL bug introduced in 0.8.7
  47. // version 0.8.7 - fix loading big manga URL in with PNG format
  48. // version 0.8.6 - fix modifying big manga URL in manga page
  49. // version 0.8.5 - fix preloading new manga URL format
  50. // version 0.8.4 - fix detecting URL new format
  51. // version 0.8.3 - fix detecting URL new format
  52. // version 0.8.2 - fix detecting URL new format
  53. // version 0.8.1 - fix detecting ugoira in prev/next
  54. // version 0.8.0 - add ability for downloading ugoira as zip
  55. // version 0.7.9 - fix for no profile image
  56. // version 0.7.8 - fix for spapi return value changes
  57. // version 0.7.7 - change [s] to [M](go directly to manga page) for manga links
  58. // version 0.7.6 - fix prev/next [s] link
  59. // version 0.7.5 - fix new manga page
  60. // version 0.7.4 - fix modified images
  61. // version 0.7.3 - fix missing session ID when it is not the end of cookie
  62. // version 0.7.2 - fix comma in tags breaking parsing logic
  63. // version 0.7.1 - fix iPhone API by supplying session ID
  64. // version 0.7 - work with new sample images with iPhone API, fix old manga
  65. // version 0.6.1 - preload manga images
  66. // version 0.6 - change manga mode to big images
  67. // version 0.5 - remove [b] link, add stylish style class
  68. // version 0.4 - updated to filter new thumbnails
  69. // version 0.3 - fix a bug, hat-tip to syosyo
  70. // version 0.2 - updated on 2008-06-25
  71. var pixivlink_run = 0;
  72. var pixivlink_reloadRequested = 0;
  73. var isNewManga = 1;
  74. var postProcImg = new Array();
  75. var preloadImg = new Array();
  76. var Imgs = new Array();
  77. //var sessID1 = (/PHPSESSID=[^;]*?(?=;|$)/.exec(document.cookie) || "");
  78. var sessID1 = "";
  79. var sessID2 = (/PHPSESSID=[0-9a-f]*?(?=;|$)/.exec(document.cookie) || ""); // should be unused
  80. var mangaFormat = 'jpg';
  81. var pixivlink_imgs = 0;
  82.  
  83. /*
  84. String.prototype.splitCSV = function(sep) {
  85. for (var foo = this.split(sep = sep || ","), x = foo.length - 1, tl; x >= 0; x--) {
  86. if (foo[x].replace(/"\s+$/, '"').charAt(foo[x].length - 1) == '"') {
  87. if ((tl = foo[x].replace(/^\s+"/, '"')).length > 1 && tl.charAt(0) == '"') {
  88. foo[x] = foo[x].replace(/^\s*"|"\s*$/g, '').replace(/""/g, '"');
  89. } else if (x) {
  90. foo.splice(x - 1, 2, [foo[x - 1], foo[x]].join(sep));
  91. } else foo = foo.shift().split(sep).concat(foo);
  92. } else foo[x].replace(/""/g, '"');
  93. } return foo;
  94. };*/
  95.  
  96. function _e(id) { return document.getElementById(id); }
  97.  
  98. function getElementsByClassName(matchClass) {
  99. var clselems = new Array();
  100. var elems = document.getElementsByTagName('*'), i;
  101. for (i in elems) {
  102. if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
  103. > -1) {
  104. clselems.push(elems[i]);
  105. }
  106. }
  107. return clselems;
  108. }
  109.  
  110. function createCookie(cookietext,days, domain) {
  111. if (days) {
  112. var date = new Date();
  113. date.setTime(date.getTime()+(days*24*60*60*1000));
  114. var expires = "; expires="+date.toGMTString();
  115. }
  116. else var expires = "";
  117. if (domain) domain = "; domain="+domain;
  118. else domain = "";
  119. document.cookie = cookietext+expires+domain+"; path=/";
  120. }
  121.  
  122. function GetImageIDFromLink(imageLink) {
  123. var imgID = 0; // If lower 11319936 it means Manga does not have Big version
  124.  
  125. var re = /\d+([_a-z0-9]+)?\.(jpe?g|gif|png)\??.*$|id=[0-9]+$/;
  126. var s = re.exec(imageLink);
  127. if (s && s.length > 0) {
  128. re = /\d+/;
  129. imgID = re.exec(s[0])[0];
  130. }
  131. return imgID;
  132. }
  133.  
  134. function pixivlink() {
  135. //alert(pixivlink_run);
  136. if (!pixivlink_run) pixivlink_run = 1;
  137. else return;
  138. var Items = document.getElementsByTagName('img');
  139. var rexa = /\?mode\=(medium|manga)\&illust_id|i\.pximg\.net|\/artworks\//;
  140. var rexb = /source.pixiv.net/;
  141. var rexc = /\/img-inf\//;
  142. var rexd = /\/mobile\//;
  143. var rexe = /\/c\//;
  144. for (var i = 0; i < Items.length; i++) {
  145. var imgR = Items[i];
  146. var aR3 = imgR.parentNode.parentNode.parentNode;
  147. var aR = imgR.parentNode.parentNode;
  148. var aR2 = imgR.parentNode;
  149. var isThumbnail = ((' ' + aR2.className + ' ').indexOf(' _layout-thumbnail ') > -1) //&& ((' ' + aR2.className + ' ').indexOf(' ui-modal-trigger ') > -1)
  150. //GM_log('aR2.className = "'+aR2.className+'", imgR.src='+imgR.src);
  151. //GM_log('isThumbnail = '+isThumbnail);
  152. if (rexa.test(aR3.href)/* || isThumbnail*/) {
  153. aR = aR3;
  154. }
  155. if (rexa.test(aR2.href)/* || isThumbnail*/) {
  156. aR = aR2;
  157. }
  158. if (rexa.test(aR.href) || isThumbnail) {
  159. if(imgR.hasAttribute("data-src")) {
  160. var imgID = GetImageIDFromLink(imgR.getAttribute("data-src"));
  161. var srcR = imgR.getAttribute("data-src").replace(/(_s|_m|_100|_64x64|_master1200|_custom1200|_square1200)\./i, ".");
  162. } else {
  163. var imgID = GetImageIDFromLink(imgR.src);
  164. var srcR = imgR.src.replace(/(_s|_m|_100|_64x64|_master1200|_custom1200|_square1200)\./i, ".");
  165. }
  166. srcR = srcR.replace(/\/c\/\d+x\d+(_\d+)?(_[a-z]\d+)?(_[a-z]\d+)?\/(img-master|custom-thumb)\//i, "/img-original/");
  167. srcR = srcR.replace(/\/img-master\//i, "/img-original/");
  168. srcR = srcR.replace(/(\d{2,})\.jpg$/, "$1_p0.jpg"); // fix ID-only URLs
  169. // var hrefR = aR.href.replace(/medium/i, "big");
  170. var tdR = aR.parentNode;
  171. //GM_log('srcR = "'+srcR);
  172. /* var linkB = document.createElement('a');
  173. linkB.href = hrefR;
  174. linkB.target = '_blank';
  175. linkB.style.padding = '0 2px';
  176. linkB.className = '_pxlazy';
  177. linkB.appendChild(document.createTextNode('[b]'));
  178. tdR.appendChild(linkB);*/
  179. // tdR.appendChild(document.createTextNode(' '));
  180. if (!rexb.test(srcR) && Imgs.indexOf(imgID) == -1 && !_e('ill_' + imgID)) {
  181. var linkS = document.createElement('a');
  182. linkS.href = srcR;
  183. linkS.target = '_blank';
  184. linkS.className = '_pxlazy _pxlazy_s';
  185. linkS.setAttribute('id', 'ill_' + imgID);
  186. linkS.appendChild(document.createTextNode('[s]'));
  187. if (aR2.tagName.toUpperCase() == 'DIV' && imgR.className.toLowerCase().indexOf('thumbnail') == -1) {
  188. var targetelem = getElementsByClassName('works_display');
  189. if(targetelem.length) {
  190. targetelem[0].appendChild(linkS);
  191. } else {
  192. tdR.appendChild(linkS);
  193. }
  194. } else {
  195. tdR.appendChild(linkS);
  196. }
  197. if (1/*rexc.test(imgR.src)||rexd.test(imgR.src)||rexe.test(imgR.src)*/) {
  198. //GM_log("postProcImg.push("+imgID+")"+imgR.src);
  199. postProcImg.push({id:imgID, url:srcR});
  200. }
  201. Imgs.push(imgID);
  202. }
  203. }
  204. }
  205.  
  206. var ItemsDiv = document.getElementsByTagName('div');
  207. //GM_log("ItemsDiv.length="+ItemsDiv.length);
  208. for (var i = 0; i < ItemsDiv.length; i++) {
  209. var divR = ItemsDiv[i];
  210. var aR = divR.parentNode.parentNode;
  211. var rexf = /\/img-master\//;
  212. var imgSrc;
  213. try{
  214. imgSrc=divR.style.backgroundImage.substr(5);
  215. imgSrc=imgSrc.substr(0,imgSrc.length-2);
  216. }catch(e) {}
  217. if(!imgSrc && divR.getAttribute("role")=='presentation') {
  218. try{
  219. imgSrc=window.getComputedStyle(divR,null).getPropertyValue('background-image').substr(5);
  220. imgSrc=imgSrc.substr(0,imgSrc.length-2);
  221. }catch(e) {}
  222. }
  223. var isThumbnail = ((' ' + divR.className + ' ').indexOf(' lazyloaded ') > -1)
  224. if(isThumbnail || rexf.test(imgSrc)) {
  225. /*var imgID = GetImageIDFromLink(divR.style.backgroundImage);
  226. var imgSrc=divR.style.backgroundImage.substr(5);
  227. imgSrc=imgSrc.substr(0,imgSrc.length-2);*/
  228. var imgID = GetImageIDFromLink(imgSrc);
  229. //GM_log("imgSrc="+imgSrc);
  230. var srcR = imgSrc.replace(/_s\.|_m\.|_100\.|_64x64|_master1200|_custom1200|_square1200\./i, ".");
  231. if (rexf.test(imgSrc) && !_e('ill_' + imgID)) {
  232. // GM_log("style.backgroundImage="+imgSrc);
  233.  
  234. var linkS = document.createElement('a');
  235. linkS.href = srcR;
  236. linkS.target = '_blank';
  237. linkS.className = '_pxlazy _pxlazy_s';
  238. linkS.setAttribute('id', 'ill_' + imgID);
  239. linkS.appendChild(document.createTextNode('[s]'));
  240.  
  241. if(aR.tagName.toUpperCase() == 'A') aR = aR.parentNode;
  242. aR.appendChild(linkS);
  243. postProcImg.push({id:imgID, url:imgSrc});
  244. }
  245. }
  246. }
  247.  
  248. if (postProcImg.length > 0) {
  249. for (var x = 0; x < postProcImg.length; x++) {
  250. if(0) { // ajax api
  251. GM_xmlhttpRequest({
  252. url: 'https://www.pixiv.net/ajax/illust/' + postProcImg[x].id,
  253. method: "GET",
  254. headers: {
  255. Referer: "http://www.pixiv.net",
  256. "Cookie": ''+sessID1
  257. },
  258. onload: function (response) {
  259. if (response.status == 200) {
  260. var rexb = /source.pixiv.net/;
  261. // var rexU = /\/c\//;
  262. var rexU = /_ugoira/;
  263. var rexe = /\/c\//;
  264. var vals = JSON.parse(response.responseText);
  265. /*var vtxt = '';
  266. for(var x=0;x < vals.length;x++)
  267. vtxt=vtxt+x+':'+vals[x]+"\n";
  268. GM_log(vtxt);*/
  269. if (!vals.error) {
  270. var slnk, imgID, isRestricted;
  271. isRestricted = vals.body.restrict;
  272. isUgoira = rexU.test(vals.body.urls.original);
  273. // if (!isRestricted) {
  274. //GM_log("imgID = vals[0]");
  275. imgID = vals.body.illustId;
  276. /* } else {
  277. //GM_log("GetImageIDFromLink("+response.finalUrl+")");
  278. imgID = GetImageIDFromLink(response.finalUrl);
  279. }*/
  280. slnk = _e('ill_' + imgID);
  281. if (slnk) {
  282. var goodSlink;
  283. if (vals.body.pageCount > 1) {
  284. goodSlink = 'http://www.pixiv.net/member_illust.php?mode=manga&illust_id=' + imgID;
  285. slnk.innerHTML = '[M]';
  286. } else {
  287. var re = new RegExp('/' + imgID + '_.*$');
  288. if (isUgoira) {// grab zip!
  289. //GM_log("isUgoira");
  290. slnk.innerHTML = '[U]';
  291. goodSlink = vals.body.urls.original.replace(/img-original/, 'img-zip-ugoira').replace(re, '/' + imgID + '_ugoira1920x1080.zip');
  292. /* } else if (rexe.test(vals[9])) {// new 480mw URL
  293. //GM_log("480mw");
  294. goodSlink = vals[9].replace(/c\/480x960\//, '').replace(/img-master/, 'img-original').replace(re, '/' + vals[0] + '_p0.' + vals[2]);
  295. } else if (!isRestricted && !rexe.test(vals[9])) {// use 480mw instead
  296. //GM_log("480mw");
  297. goodSlink = vals[9].replace(/mobile\//, '').replace(re, '/' + vals[0] + '.' + vals[2]);
  298. } else { //salvage from profile image
  299. //GM_log("salvage");
  300. re = /\/[0-9_]+\..*$/;
  301. goodSlink = vals[29].replace(/mobile\//, '').replace(/profile\//, 'img/').replace(re, '/' + imgID + '.' + vals[2]);
  302. */
  303. } else {
  304. goodSlink = vals.body.urls.original;
  305. }
  306. }
  307. slnk.href = goodSlink;
  308.  
  309. // convert UTC time to ISO date string in GMT+9
  310. var datestamp=(new Date((new Date(vals.body.uploadDate)).getTime()+(3600000*9))).toISOString();
  311. slnk.title=datestamp.substring(0,10)+" "+datestamp.substring(11,19); // "date time"
  312. slnk.className = '_pxlazy _pxlazy_s _pxlazy_s_new';
  313. }
  314. }
  315. } else if (response.status == 400) {
  316. // accessToken ="";
  317. // GM_setValue("accessToken",accessToken);
  318. }
  319. }
  320. });
  321. } else {
  322. //GM_log("check="+JSON.stringify(postProcImg[x], null, 4));
  323. //GM_log("check url="+(postProcImg[x]).url);
  324. GM_xmlhttpRequest({
  325. url: postProcImg[x].url,
  326. method: "HEAD",
  327. headers: {
  328. Referer: "http://www.pixiv.net",
  329. "Cookie": ''+sessID1
  330. },
  331. onload: function (response) {
  332. var slnk, imgID, isRestricted;
  333. imgID = GetImageIDFromLink(response.finalUrl);
  334. slnk = _e('ill_' + imgID);
  335. //GM_log("response="+JSON.stringify(response, null, 4));
  336. if (response.status == 200) {
  337. //GM_log("url="+response.finalUrl+" exists");
  338. } else /* assume error */ {
  339. GM_log("url="+response.finalUrl+" NOT exist!");
  340. slnk.href = slnk.href.replace(/\.jpg$/,".png"); // dumb replacing jpg to png
  341. }
  342. }
  343. });
  344. }
  345. }
  346. }
  347.  
  348. /* var links = document.getElementsByTagName('a');
  349. var tagslink = /tags\.php\?tag=/;
  350. for (var i = 0; i < links.length; i++) {
  351. if (tagslink.test(links[i].href))
  352. links[i].href = links[i].href.replace("tags.php?tag=", "search.php?s_mode=s_tag&word=");
  353. }*/
  354.  
  355. if (unsafeWindow.pixiv && unsafeWindow.pixiv.context.images) {
  356. var illustID = GetImageIDFromLink(unsafeWindow.pixiv.context.images[0]/*[0]*/);
  357. isNewManga = (illustID >= 11319936);
  358. //GM_log("illustID="+illustID);
  359. GM_xmlhttpRequest({
  360. url: 'https://www.pixiv.net/ajax/illust/' + illustID + '/pages',
  361. method: "GET",
  362. headers: {
  363. Referer: "http://www.pixiv.net",
  364. "Cookie": ''+sessID1
  365. },
  366. onload: function (response) {
  367. if (response.status == 200) {
  368. //GM_log(response.responseText);
  369. var vals = JSON.parse(response.responseText);
  370. var rexe = /\/c\//;
  371. if(!vals.error) {
  372. mangaFormat = vals.body[0].urls.original.split('.').pop();
  373. //GM_log(mangaFormat);
  374. /*var vtxt = '';
  375. for(var x=0;x < vals.length;x++)
  376. vtxt=vtxt+x+':'+vals[x]+"\n";
  377. GM_log(vtxt);*/
  378. //GM_log("2nd");
  379. /*if (rexe.test(vals[9]))*/ mangaFull();
  380. }
  381. } else if (response.status == 400) {
  382. // accessToken ="";
  383. // GM_setValue("accessToken",accessToken);
  384. }
  385. }
  386. });
  387. var rexe = /\/c\//;
  388. //GM_log("isNewManga");
  389. //setTimeout(mangaFull,250);
  390. //GM_log("2nd");
  391. // mangaFull();
  392. }
  393. }
  394.  
  395. var vp_w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
  396. var vp_h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)
  397. function resizeImg(obj){
  398. //console.log("resizeImg");
  399. var imgW=obj.width;
  400. var imgH=obj.height;
  401. var imgAR=imgW/imgH;
  402.  
  403. obj.alt = obj.src;
  404.  
  405. /* set min size to 16x16px */
  406. obj.style.minWidth = '16px';
  407. obj.style.minHeight = '16px';
  408.  
  409. if(imgW > vp_w || imgH > vp_h) {
  410. if(imgAR < 1.0) {
  411. obj.height = vp_h*0.95;
  412. obj.width = obj.height*imgAR;
  413. } else {
  414. obj.width = vp_w*0.88;
  415. obj.height = obj.width/imgAR;
  416. }
  417. }
  418. }
  419.  
  420. function mangaFull() {
  421. Items = document.getElementsByTagName('img');
  422. var rexe = /\/img-/;
  423. for (var x = 0; x < unsafeWindow.pixiv.context.images.length; x++) {
  424. if (isNewManga) {
  425. if(rexe.test(unsafeWindow.pixiv.context.images[x]))
  426. unsafeWindow.pixiv.context.images[x]/*[0]*/ = unsafeWindow.pixiv.context.images[x]/*[0]*/.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1."+mangaFormat);
  427. else
  428. unsafeWindow.pixiv.context.images[x]/*[0]*/ = unsafeWindow.pixiv.context.images[x]/*[0]*/.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
  429. }
  430. preloadImg.push(new Image());
  431. preloadImg[preloadImg.length - 1].src = unsafeWindow.pixiv.context.images[x]/*[0]*/;
  432. }
  433.  
  434. for (var x = 0; x < Items.length; x++) {
  435. var datasrc = Items[x].getAttribute("data-src");
  436. if (datasrc) {
  437. //GM_log("original-datasrc="+datasrc+" ,mangaFormat="+mangaFormat);
  438. if(rexe.test(datasrc))
  439. datasrc = datasrc.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1."+mangaFormat);
  440. else
  441. datasrc = datasrc.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
  442. //GM_log("new-datasrc="+datasrc+" ,mangaFormat="+mangaFormat);
  443. }
  444. Items[x].setAttribute("data-src", datasrc);
  445. Items[x].addEventListener('load', function(e) {resizeImg(e.target);},true);
  446. if (isNewManga) {
  447. //GM_log(x+".src="+Items[x].src);
  448. if(datasrc)
  449. Items[x].src = datasrc;
  450. else if(rexe.test(Items[x].src))
  451. Items[x].src = Items[x].src.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1$2");
  452. else
  453. Items[x].src = datasrc ? datasrc : Items[x].src.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
  454. }
  455. }
  456. }
  457.  
  458. /*if(!autoLogin) {
  459. GM_registerMenuCommand("Enable Auto Login", function(){
  460. GM_setValue("autoLogin",true);
  461. });
  462. } else {
  463. GM_registerMenuCommand("Disable Auto Login", function(){
  464. GM_setValue("autoLogin",false);
  465. });
  466. }*/
  467. window.addEventListener("load", pixivlink, true);
  468.  
  469. // create button for manually trigger source link generation
  470. tmp = document.createElement ('input');
  471. tmp.id = 'pxlink';
  472. tmp.type = 'button';
  473. tmp.value='P';
  474. tmp.accessKey='x';
  475. tmp.style.position = "fixed";
  476. tmp.style.bottom = "0px";
  477. tmp.style.left = "0px";
  478. tmp.style.backgroundColor="#fdd";
  479.  
  480. tmp.addEventListener("click", function(e){postProcImg = new Array();pixivlink_run = 0;pixivlink();}, false);
  481. document.body.appendChild(tmp);
  482.  
  483. if(location.pathname != "/")
  484. setTimeout(function() {
  485. document.getElementById('pxlink').click();
  486. }, 2000);

QingJ © 2025

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