您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
当前为
// ==UserScript== // @name Viewer for XiuRen // @namespace http://tampermonkey.net/XiuRen // @version 0.5 // @description try to take over the world! // @author You // @match https://www.xiurenji.cc/* // @match https://www.xiurenji.net/* // @match https://www.xiurenji.vip/* // @match https://www.xiurenb.net/* // @icon https://www.google.com/s2/favicons?domain=xiurenb.net // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_getResourceText // @require https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.9.0/viewer.min.js // @resource viewerCSS https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.9.0/viewer.min.css // ==/UserScript== (function () { "use strict"; var DEBUG_INFO = false; var DEBUG_VERBOSE = false; function debug_info(...data) { if (DEBUG_INFO) { console.log("[INFO] ", data); } } function debug_verbose(...data) { if (DEBUG_VERBOSE) { console.log("[VERBOSE]", data); } } function sleep(time) { return new Promise((resolve) => window.setTimeout(resolve, time)); } function Random(min, max) { return Math.round(Math.random() * (max - min)) + min; } GM_addStyle(GM_getResourceText("viewerCSS")); var href = window.location.href; debug_info("handle: " + href); if (href.indexOf("_") != -1) { return; // 仅处理图集的首页 } function images_paragraph_node(root_document, sub_page = false) { if (sub_page) { return root_document.querySelector( "body > div.main > div > div > div:nth-child(6) > p:nth-child(2)" ); } else { return root_document.querySelector( "body > div.main > div > div > div:nth-child(6) > p" ); } } var new_image_viewer_ul = document.createElement("ul"); // 注册新的图片浏览器 var img_container = images_paragraph_node(document).parentNode; // 原网页图片所在的div容器 new_image_viewer_ul.setAttribute("id", "imagesViewer"); img_container.appendChild(new_image_viewer_ul); // 注入新的图片浏览器到原图片所在的div容器 var gallery = new Viewer(new_image_viewer_ul, { fullscreen: false, interval: 1200, loop: false, transition: false, }); // 删除原来的图片段落 images_paragraph_node(document).remove(); // @description 从网页源码中获取图片分组 // @return 每页的图片数组 function getPageImages(i, htmlDoc) { let is_sub_page = i != 0; // 第0页和第1页的获取逻辑不同 let text = images_paragraph_node(htmlDoc, is_sub_page).outerHTML; console.log(text); let template = `<div class='child${i}'>${text}</div>`; let tempNode = document.createElement("div"); tempNode.innerHTML = template; let imgs = Array.from(tempNode.firstChild.getElementsByTagName("img")); return imgs; // HTMLCollection(3) [img, img, img] } function page_indicator_node(root_document) { return root_document.querySelector( "body > div.main > div > div > div:nth-child(5) > div > div" ); } var page_ind = page_indicator_node(document); var pages_num = page_ind.innerText.split("\n"); pages_num = pages_num.slice(1, pages_num.length - 1); // 去头掐尾 var pages_url = []; var pages_map = {}; pages_url.push(href); // 第 0 页 function update_img_set(page, img_set) { pages_map[page] = img_set; console.log( `update_img_set: 加载页面 ${page + 1} / ${pages_url.length}, 共计 ${ img_set.length } 张图片` ); if (Object.keys(pages_map).length === pages_url.length) { console.log("所有页面的信息已经加载到 pages_map 中"); let img_cnt = 0; for (let i = 0; i < pages_url.length; i++) { img_set = pages_map["" + i]; let img_cnt_this_page = 0; // console.log(img_set) for (let j = 0; j < img_set.length; j++) { let img = img_set[j]; img.setAttribute("style", "max-height: 1080px"); img_cnt += 1; img_cnt_this_page += 1; new_image_viewer_ul.appendChild(img); } console.log(i, "页", img_cnt_this_page, "张"); } console.log("共计", img_cnt, "张"); } gallery.update(); } for (let i = 0; i < pages_num.length; i++) { let page = parseInt(pages_num[i]); if (page) { if (page - 1 === 0) continue; pages_url.push( href.slice(0, href.lastIndexOf(".")) + `_${page - 1}.html` ); } } (function addBtn(text, disable) { let btn = document.createElement("input"); let div = document.createElement("dpiv"); let btnFarther = document.getElementsByClassName("item_info")[0]; div.appendChild(btn); btnFarther.appendChild(div); div.style.textAlign = "center"; btn.disabled = disable; btn.type = "submit"; btn.value = text; btn.style.textAlign = "center"; btn.style.verticalAlign = "middle"; btn.style.color = "#666666"; btn.style.background = "#fff"; btn.style.width = "10rem"; btn.style.height = "2rem"; btn.style.background = "-webkit-gradient(linear,left top, right top,from(#02fdfe),to(#d3fb42))"; btn.style.border = "1px"; btn.style.borderRadius = "3rem"; btn.onclick = function () { gallery.show(); }; })("Play by Viewer", false); for (let i = 0; i < pages_url.length; i++) { let durl = pages_url[i]; console.log("采集图片自", durl); GM_xmlhttpRequest({ url: durl, method: "GET", onload: (xhr) => { let data = xhr.response; // debug_info(data); let htmlDoc = new DOMParser().parseFromString(data, "text/html"); update_img_set(i, getPageImages(i, htmlDoc)); }, }); } })();