// ==UserScript== // @name 图集岛VIP-FancyBox版 // @namespace https://scriptcat.org/script-show-page/443 // @version 1.7 // @description 破解图集岛VIP // @author yyg, 253681319,LARASSR // @include /https?:\/\/(\w+\.)?tujidao\w+\.\w+/ // @grant none // @date 2022-01-14 // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @license MIT // ==/UserScript== (async function () { "use strict"; let isDebugMain = false; let fancyboxyArrIndex=0; let mainArr = [ 'https://cdn.jsdelivr.net/gh/CYqiang-sc/hello@master/main.js', 'https://cdn.staticaly.com/gh/CYqiang-sc/hello@master/main.js', 'https://greasyfork.org/scripts/447371-commonlymainfunctions/code/CommonlyMainFunctions.js?version=1066681' ]; let fancyboxyArr = [ 'https://cdn.jsdelivr.net/gh/CYqiang-sc/hello@master/fancybox.js', 'https://cdn.staticaly.com/gh/CYqiang-sc/hello@master/fancybox.js', 'https://larassr.coding.net/p/fancybox4.0/d/fancybox4/git/raw/master/fancybox4.js' ]; async function startMain_() { function log() { if (isDebugMain) { console.log.apply(this, arguments); } }; function isEmpty(param) { if (param) { var param_type = typeof (param); if (param_type == 'object') { //要判断的是【对象】或【数组】或【null】等 if (typeof (param.length) == 'undefined') { if (JSON.stringify(param) == "{}") { return true; //空值,空对象 } } else if (param.length == 0) { return true; //空值,空数组 } } else if (param_type == 'string') { //如果要过滤空格等字符 var new_param = param.trim(); if (new_param.length == 0) { //空值,例如:带有空格的字符串" "。 return true; } } else if (param_type == 'boolean') { if (!param) { return true; } } else if (param_type == 'number') { if (!param) { return true; } } return false; //非空值 } else { //空值,例如: //(1)null //(2)可能使用了js的内置的名称,例如:var name=[],这个打印类型是字符串类型。 //(3)空字符串''、""。 //(4)数字0、00等,如果可以只输入0,则需要另外判断。 return true; } } function Get_(link) { return new Promise(function (resolve) { $.get(link, data => { resolve(data); }); }); } function addScript_(statement = null, src = null, isModule = false) { let mountElement = document.getElementsByTagName('head')[0]; if (mountElement) { let script = document.createElement("script"); if (src !== null) { script.src = src; } else if (statement !== null) { script.textContent = statement; if (isModule) script.type = "module"; } return new Promise((resolve, reject) => { try { mountElement.appendChild(script); script.onerror = (e) => reject(e); script.onload = () => { resolve(); } } catch (error) { reject(error); } }); } return null; } function delayPromise(ms) { return new Promise(function (resolve) { setTimeout(resolve, ms); }); } function timeoutPromise(name, promise, ms = 1000) { let timeout = delayPromise(ms).then(function () { throw new Error(name + ': Operation timed out after ' + ms + ' ms'); }); return Promise.race([promise, timeout]); } let initialArrFunction = async function (arr) { for (let index in arr) { let data; try { data = await timeoutPromise(arr[index], Get_(arr[index])); log(data); } catch (error) { debugger log(error); timeoutPromise(arr[index], addScript_(null, arr[index])); } if (!isEmpty(data)) { addScript_(data); fancyboxyArrIndex=index; break; } } }; await initialArrFunction(mainArr); await initialArrFunction(fancyboxyArr); } console.clear(); if (isDebugMain) console.groupCollapsed('StartMain'); await startMain_(); if (isDebugMain) console.groupEnd('StartMain'); await new Promise(function (resolve) { let id = setInterval(function () { try { //打印开关 isDebug = isDebugMain; if (Fancybox4) { log("fancybox4js finished!\n"); clearInterval(id); resolve(); }; } catch (error) { log("fancybox4js isn't finished!"); } }, 100); }); var html1 = 'img_title' + ""+ '
'; var html2 = "
"; var pic_base = "
{imgnum}
"; console.log("start"); var createnew = function (num, pic_id, tags) { var pic_new = pic_base.replace("{pic_id}", pic_id); var tagHtml = []; var last = tags.pop(); for (let t of tags) { tagHtml.push(t.outerHTML); } tagHtml.push(last.innerText); tagHtml = "
" + tagHtml.join(" / ") + "
"; var imgs = []; for (var i = 1; i <= num; i++) { imgs.push( pic_new.replace("{num}", i).replace("{imgnum}", ` [${i}/${num}]`) ); } let html = html1.replace("img_title", `${last.innerText} - ${num}P @ ${pic_id}`); html += imgs.join("\n"); html += html2; var w = window.open("https://www.tujidao.com/"); w.onload = () => { w.document.write(tagHtml + html); var head = w.document.getElementsByTagName('head')[0]; if (head) { var statement = document.createElement('script'); statement.src = fancyboxyArr[fancyboxyArrIndex]; head.appendChild(statement); statement = document.createElement('script'); statement.textContent = fancyboxDefaultJs; head.appendChild(statement); statement = document.createElement('style'); statement.setAttribute('type', 'text/css'); statement.textContent = fancyBoxCss; head.appendChild(statement); if(os.isPc){ statement = document.createElement('style'); statement.setAttribute('type', 'text/css'); statement.textContent = fancyBoxCssAdditon; head.appendChild(statement); } } w.document.close(); }; }; // var lis = document.getElementsByClassName('shuliang'); //
  • // // 27P //

    机构:网络美女

    //

    标签:大尺-度 福利

    //

    人物:Byoru

    //

    [网红COSER写真] 日本性感萝莉Byoru - Kiara Summer

    //
  • // 小图链接 /** * 给已有的图片容器添加点击事件,移除原有跳转链接 */ function addEvent(list) { for (const li of list) { //第一个a li.querySelector('img').onclick = function () { // 获取数量 var num = li .querySelector("span.shuliang") .innerText.split("P")[0]; num = parseInt(num); // id var aTag = li.querySelector("a"); aTag.removeAttribute("href"); // 删除链接,防止跳转 var id = li.querySelector(".biaoti a").getAttribute("href"); id = id.split("id=")[1]; //丢掉最后一个 var tags = li.querySelectorAll("p>a"); createnew(num, id, [...tags]); }; } } /** * 获取当前页面的图片列表 */ function getLiList() { return document.querySelectorAll("div.hezi>ul>li"); } addEvent(getLiList()); var contentContainer = document.getElementById("search"); var config = { childList: true, subtree: true }; // 当观察到突变时执行的回调函数 var callback = function (mutationsList) { mutationsList.forEach(function (item, index) { const { addedNodes } = item; addEvent(addedNodes); }); }; // 创建一个链接到回调函数的观察者实例 var observer = new MutationObserver(callback); // 开始观察已配置突变的目标节点 contentContainer && observer.observe(contentContainer, config); })();