破解VIP、一键打包下载和图片自适应
// ==UserScript== // @name 图集岛破解VIP-#力加强版修改匹配地址--lc自用 // @namespace http://tampermonkey.net/ // @version 2.2.5.3 // @description 破解VIP、一键打包下载和图片自适应 // @author 原作者请搜索fordes123 // @homepageURL https://greasyfork.org/zh-CN/scripts/446150 // @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.0.0/jquery.min.js // @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jszip/3.7.1/jszip.min.js // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/FileSaver.js/2.0.5/FileSaver.min.js // @match https://www.sqmuying.com/* // @include https://www.sqmuying.com/* // @match *.sqmuying.com/* // @include *.sqmuying.com/* // @match https://www.sqmuying.com/ // @include https://www.sqmuying.com/ // @match *.sqmuying.com/ // @include *.sqmuying.com/ // @match https://www.sqmuying.com // @include https://www.sqmuying.com // @match *.sqmuying.com // @include *.sqmuying.com // @grant GM_xmlhttpRequest // @license MIT // ==/UserScript== (function () { "use strict"; function asyncGet(zip, filename, url) { const defered = $.Deferred(); GM_xmlhttpRequest({ method: "GET", url: url, headers: { referer: window.location.href, }, responseType: "blob", onload: (response) => { zip.file(filename, response.response); defered.resolve("success"); console.log(filename + " download completed~"); }, onerror: () => console.log(filename + "(" + url + ") download failed!") }); return defered; } function download() { let filename; const start = performance.now(); const zip = new JSZip(); const list = document.querySelectorAll("#kbox>img"); console.log("start download... " + list.length + " task"); let arr = []; for (const item of list) { filename = item.getAttribute("filename"); const url = item.getAttribute("data-src"); arr.push(asyncGet(zip, filename, url)); } filename = $("title").text(); $.when.apply(this, arr).then((...args) => { console.log("download completed... " + args.length + " task"); console.log("start generate zip files, timely: ", `${(performance.now() - start) / 1000} s`); zip.generateAsync({ type: "blob", }).then((content) => { saveAs(content, filename + ".zip"); sessionStorage.removeItem(filename); console.log("all completed: ", `${(performance.now() - start) / 1000} s`); }); }); } function tujidaoinit() { let action = document.location.href.split(window.location.host)[1]; try { layui.use('layer', () => layer = layui.layer); } catch (e) { } switch (action) { case "/": if (localStorage.getItem("data") != null) { let data = JSON.parse(localStorage.getItem("data")); localStorage.removeItem("data"); $("title").html(data.title); $('.lg').remove(); let footer = $(".footer"); footer.before($("<div class='tuji'><h1>" + data.title + "</h1>" + data.tags + "<p>图片数量:" + data.num + "P</p></div>")); footer.before(`<div class='mulu'><li id='scrollToTop'>回顶</li><li id='back'>返回</li><li id='collect'>${localStorage.getItem(data.id) != null ? "移除" : "收藏"}</li><li id='download'>下载</li></div>`) const kbox = $("<div id='kbox'></div>"); for (let i = 1; i <= data.num; i++) { kbox.append(`<img class='lazy' filename='${data.title}-${i}.jpg' src='/Static/images/default.png' data-src='${data.prefix}${data.path}/${data.id}/${i}.jpg'>`) } footer.before(kbox); footer.before($('<script src="/Static/css/lazy.js"></script>')); footer.before($(`<script>$(function(){'use strict';var console=window.console||{log:function(){}};var $images=$('#kbox');var $toggles=$('.docs-toggles');var $buttons=$('.docs-buttons');var options={tooltip:true,title:false,navbar:false,fullscreen:false,zoomRatio:0.2,url:'data-src',ready:function(e){console.log(e.type)},show:function(e){console.log(e.type)},shown:function(e){console.log(e.type)},hide:function(e){console.log(e.type)},hidden:function(e){console.log(e.type)},view:function(e){console.log(e.type)},viewed:function(e){console.log(e.type)}};function toggleButtons(mode){if(/modal|inline|none/.test(mode)){$buttons.find('button[data-enable]').prop('disabled',true).filter('[data-enable*="'+mode+'"]').prop('disabled',false)}}$images.on({ready:function(e){console.log(e.type)},show:function(e){console.log(e.type)},shown:function(e){console.log(e.type)},hide:function(e){console.log(e.type)},hidden:function(e){console.log(e.type)},view:function(e){console.log(e.type)},viewed:function(e){console.log(e.type)}}).viewer(options);toggleButtons(options.inline?'inline':'modal');$toggles.on('change','input',function(){var $input=$(this);var name=$input.attr('name');options[name]=name==='inline'?$input.data('value'):$input.prop('checked');$images.viewer('destroy').viewer(options);toggleButtons(options.inline?'inline':'modal')});$buttons.on('click','button',function(){var data=$(this).data();var args=data.arguments||[];if(data.method){if(data.target){$images.viewer(data.method,$(data.target).val())}else{$images.viewer(data.method,args[0],args[1])}switch(data.method){case'scaleX':case'scaleY':args[0]=-args[0];break;case'destroy':toggleButtons('none');break}}})});layui.use('element',function(){var element=layui.element});</script>`)); footer.before($('<script> layui.use("element", function(){ var element = layui.element; }); </script>')); $(document).on("click", "#download", () => { if (sessionStorage.getItem(data.title) == null) { sessionStorage.setItem(data.title, true); layer.msg("已创建下载任务", download()); } else { layer.msg("努力打包中, 请耐心等待!", { time: 1000 }); } }); $(document).on("click", "#scrollToTop", () => scrollTo(0, 0)); $(document).on("click", "#back", () => window.close()) $(document).on("click", "#collect", () => { let catalog = JSON.parse(localStorage.getItem("collect") || "[]"); const index = catalog.indexOf(data.id); if (index != -1) { let newCatelog = []; catalog.forEach((item, i) => { if (i != index) { newCatelog.push(item); } }); catalog = newCatelog; localStorage.removeItem(data.id); localStorage.setItem("collect", JSON.stringify(newCatelog)); $(`#collect`).text(`收藏`); layer.msg("已取消收藏", { time: 1000 }); } else { catalog.push(data.id); localStorage.setItem(data.id, JSON.stringify(data)); $(`#collect`).text(`移除`); localStorage.setItem("collect", JSON.stringify(catalog)); layer.msg("已添加收藏", { time: 1000 }); } }); // window.onbeforeunload = () => localStorage.setItem("data", JSON.stringify(data)); localStorage.removeItem("data"); } break; case "/u/": $('.lg>p:nth-child(2)').html("您目前的会员等级: <span>白嫖VIP </span>"); let up = $('.unav>a[href="/u/?action=shengji"]'); up.attr("href", "https://greasyfork.org/zh-CN/scripts/446150"); up.attr("target", "_blank"); up.attr("style", "color: #c12c1f;"); up.text("👉 脚本主页"); $('.lg').append('<p style="font-size: 14px;"><span>白嫖会员:</span> 以上功能全部免费白嫖!只求去脚本主页给个好评支持一下~</p>') break; case "/u/?action=shoucang": let catalog = localStorage.getItem("collect") == null ? [] : JSON.parse(localStorage.getItem("collect")); $('.width').remove(); $('.c').after(`<div class="width"><fieldset class="layui-elem-field layui-field-title"><legend>我的收藏</legend></fieldset> </div>`); let ul = $('.hezi > ul'); for (let i = 0; i < catalog.length; i++) { let data = JSON.parse(localStorage.getItem(catalog[i])); ul.append(`<li id="${data.id}"> <a href="/a/?id=${data.id}" target="_blank" ><img src="${data.prefix}${data.path}/${data.id}/0.jpg"/></a><span class="shuliang">${data.num}P</span>${data.tags}<p class="biaoti"><a href="/a/?id=${data.id}">${data.title}</a></p></li>`); } default: $("div.hezi>ul>li").each(function () { let $item = $(this); $(this) .find('a[href^="/a/?id="]') .each(function () { $(this).attr("href", "/"); var tags = ""; $item.find("p:not(.biaoti)").each(function () { tags += "<p>" + $(this).html() + "</p>"; }); let title = $item.find("p.biaoti > a").text(); let num = $item.find("span.shuliang").text().split("P")[0]; let id = /(.*)(\d+)\/(\d+)\/(\d+).*/g.exec($item.find('img').attr('src')); if (num == null || id.length < 3) { throw ("未获取到图集信息" + $item.html()); } $(this).on("click", function () { var data = { "num": num, "tags": tags, "prefix": id[1], "path": id[2], "id": id[3], "title": title }; localStorage.setItem("data", JSON.stringify(data)); window.open("/"); return false; }); }); }); break; } } tujidaoinit() var last = 1; new MutationObserver(() => { if ($('.hezi').length > last) { console.log("观察到分页脚本触发, 图集岛脚本重新初始化...") tujidaoinit() last = $('.hezi').length; } }).observe(document.body, { childList: true, subtree: true }); })();