您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
将分页的图片网站聚合到一页显示
// ==UserScript== // @name zdf图片站聚合显示 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 将分页的图片网站聚合到一页显示 // @author You // @match https://goddess247.com/* // @match http*://*/meinvtupian/* // @match http*://*/bizhitupian/* // @match http*://*dmmtu.com/* // @match https://www.dmmtu.com/* // @icon data:image/png;base64,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 // @require https://cdn.bootcdn.net/ajax/libs/jquery/1.8.3/jquery.min.js // @icon https://i.loli.net/2021/03/07/rdijeYm83pznxWq.png // @license MIT // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @grant GM_notification // @grant GM_listValues // @grant unsafeWindow // @grant GM_xmlhttpRequest // @connect * // ==/UserScript== (function() { //网站数据 //----------------------------------------- const urlMapping = [{ myurl: 'www.umei.cc', weiyecss: 'div.pages ul li a', charucss1:'div.big-pic', charucss2:'div.big-pic a img', adcss:'',}, { myurl: 'www.dmmtu.com', weiyecss: 'div.link_pages a', charucss1:'div.main-body', charucss2:'div.main-body img', adcss:["#sidebar",".main-tags"],}, { myurl: 'goddess247.com', weiyecss: '', charucss1:'', charucss2:'div.elementor-widget-container img', adcss:["#sidebar",".link_pages",".main-tags"],} ]; //------------------------------------------------------- //功能菜单数据 //------------------------------------------------------ const caidan = [{ name:"缩小图片", weiyecss: 'div.pages ul li a', charucss1:'div.big-pic', charucss2:'div.big-pic a', adcss:'',}, { name: "放大图片", weiyecss: 'div.link_pages a', charucss1:'div.main-body', charucss2:'div.main-body img', adcss:["#sidebar",".link_pages",".main-tags"],}, { name: "保存本页", weiyecss: 'div.link_pages a', charucss1:'div.main-body', charucss2:'div.main-body img', adcss:["#sidebar",".link_pages",".main-tags"],}, { name: "读取保存", weiyecss: 'div.link_pages a', charucss1:'div.main-body', charucss2:'div.main-body img', adcss:'',}, { name: "网站列表", weiyecss: '', charucss1:'', charucss2:'', adcss:'',} ]; //-------------------------------------------------------- //功能函数 //----------------------------------------------------- //根据网站数据中CSS选择器移除广告 function admove(adcss){ //alert(adcss); for(let i in adcss){$(adcss[i]).remove();} } //function isin(keys要查找的字符串,words被查找的字符串) 如果被查找字符串中包含要查找的字符串则返回值大于0,没找到则等于-1 function isin(keys,words){ words=words || "尾页"; return words.indexOf(keys); } //根据网站数据中CSS选择器返回尾页按钮地址 function getweiye(mycss){ var el = document.querySelectorAll(mycss); for (var i = 0; i < el.length; i++) { if ( isin(el[i].text)>-1 ) { return el[i].href;} } } //取地址前缀,不带扩展名(.htm) function getqianadd(myadd){ if(myadd.indexOf("_")>-1) { return myadd.slice(0,myadd.lastIndexOf("_")); } else { return myadd.slice(0,myadd.lastIndexOf(".")); } } //取地址后缀,扩展名(.htm 或 .html) function gethouadd(myadd){ return myadd.slice(myadd.lastIndexOf("."),myadd.length); } //返回影集页数,返回的是一个整数 function getnum(myadd){ return parseInt(myadd.slice( myadd.lastIndexOf("_")+1,myadd.lastIndexOf("."))); } //根据文本创建DOCUMENT function createDocumentByString (e) { if (e) { if ('HTML' !== document.documentElement.nodeName) return (new DOMParser).parseFromString(e, 'application/xhtml+xml'); var t; try { t = (new DOMParser).parseFromString(e, 'text/html');} catch (e) {} if (t) return t; if (document.implementation.createHTMLDocument) { t = document.implementation.createHTMLDocument('ADocument'); } else { try {((t = document.cloneNode(!1)).appendChild(t.importNode(document.documentElement, !1)), t.documentElement.appendChild(t.createElement('head')), t.documentElement.appendChild(t.createElement('body')));} catch (e) {} } if (t) { var r = document.createRange(), n = r.createContextualFragment(e); r.selectNodeContents(document.body); t.body.appendChild(n); for (var a, o = { TITLE: !0, META: !0, LINK: !0, STYLE: !0, BASE: !0}, i = t.body, s = i.childNodes, c = s.length - 1; c >= 0; c--) o[(a = s[c]).nodeName] && i.removeChild(a); return t; } } else console.error('没有找到要转成 DOM 的字符串'); }; //插入样式表 function addstyle(){ const myScriptStyle = document.createElement("style"); myScriptStyle.innerHTML = ".charu { width: 33%;float:left } img { width: 100%; height:100%; }*{ margin: 0;padding: 0;}.drawing{width: 150px;margin: 10px;}.drawing:hover{cursor: zoom-in;}.fangdaimg{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 999;background-repeat: no-repeat;background-attachment: fixed;background-position: center;background-color: rgba(52, 52, 52, 0.8);background-size: auto 99%;}.fangdaimg:hover{cursor: zoom-out;}"; document.getElementsByTagName("head")[0].appendChild(myScriptStyle); $("div.main-content").css("margin-right","0px"); } //插入div节点 //charu(节点数,插入连接前缀,插入连接后缀,插入节点的CSS选择式,读取网页内容的CSS选择式) function charu(num,cqian,chou,ccss,dcss){ //var el = document.querySelector(ccss); //alert(ccss); for (var i = 2; i <=num; i++) { $(ccss).before(" <div id='charu"+i.toString()+"' class='charu'></div>"); // $("div#charu"+i.toString()).load(cqian+"_"+i.toString()+chou +" "+dcss,function(responseTxt,statusTxt,xhr){alert("载入结束");}); $("div#charu"+i.toString()).load(cqian+"_"+i.toString()+chou +" "+dcss); } } //取地址的匹配CSS function getcss(myaddr) { for (let index in urlMapping) { let item = urlMapping[index]; //alert(item.myurl+" "+myaddr); //判断当前页面url是否在数据中,在就插入图片 if( isin(item.myurl,myaddr)>=0){ return item.charucss2; } } return ""; }; //取当前网站的匹配名 function getmyurl() { for (let index in urlMapping) { let item = urlMapping[index]; //alert(item.myurl+" "+myaddr); //判断当前页面url是否在数据中,在就插入图片 if( isin(item.myurl,window.location.href)>=0){ return item.myurl; } } return ""; }; //功能菜单构建函数 //-------------------------------------------- function addBox() { // 主元素 var div = document.createElement('div') div.id = 'caidan-box' div.style = "position: fixed; top: 120px; left: 20px; width: 80px; background-color: #EEEEEE; font-size: 12px;z-index: 99999;" // document.body.appendChild(div) document.body.insertAdjacentElement("afterBegin", div); // 标题 let title = document.createElement('span') title.innerText = "工具菜单" title.style = "display: block; text-align: center; margin-top: 10px; font-size: 14px; font-weight: bold;" div.appendChild(title) // 搜索列表 for (let index in caidan) { let item = caidan[index]; // 样式 let style = "display: block; padding: 10px 0 10px 20px; text-decoration: none;"; let defaultStyle = style + "color: #333333;"; let hoverStyle = style + "color: #ffffff; background-color: #666666;"; let a = document.createElement('a') a.href = 'javascript:;' a.innerText = item.name a.style = defaultStyle a.id = index // 鼠标移入移除效果,相当于hover a.onmouseenter = function () { this.style = hoverStyle } a.onmouseleave = function () { this.style = defaultStyle } a.onclick = function () { //菜单中按钮命令 //alert(a.id); //a.id 可以用来做执行函数的参数,实现区分功能 //根据菜单编号完成相对功能 if (a.id==0){//缩小图片 $(".charu").css("width",parseInt ($(".charu").css("width"))-50+"px"); } if (a.id==1){//放大图片 $(".charu").css("width",parseInt ($(".charu").css("width"))+50+"px"); } if (a.id==2){//收藏页面 //保存当前页标题和网址 //GM_listValues((keys) => console.log(keys)); //alert(document.title); GM_setValue(document.title,window.location.href); } if (a.id==3){//查看收藏页面 let mylist=GM_listValues(); //console.log(aa); //alert(GM_getValue("zdf", null)); document.documentElement.innerHTML="<html><head></head><body><div class='charumain'></div></body></html>"; const myScriptStyle = document.createElement("style"); myScriptStyle.innerHTML = ".charu { width: 33%;float:left } img { width: 100%;height:100%; }*{ margin: 0;padding: 0;}.drawing{width: 150px;margin: 10px;}.drawing:hover{cursor: zoom-in;}.fangdaimg{position: fixed;top: 0;right: 0;bottom: 0;left: 0;z-index: 999;background-repeat: no-repeat;background-attachment: fixed;background-position: center;background-color: rgba(52, 52, 52, 0.8);background-size: auto 99%;}.fangdaimg:hover{cursor: zoom-out;}"; document.getElementsByTagName("head")[0].appendChild(myScriptStyle); //let sbody=document.body; //let qian= getqianadd(aa[0]); //取前缀 //console.log(qian); //let hou= gethouadd(aa[0]); //取后缀 for ( let i in mylist){ //console.log(mylist[i]); let uu=GM_getValue(mylist[i], null); if (uu.indexOf(getmyurl())>-1) { let cs=getcss(uu); //alert(cs+" "+uu); $("div.charumain").append(" <div id='charu"+i.toString()+"' class='charu'></div>"); // $("div#charu"+i.toString()).load(cqian+"_"+i.toString()+chou +" "+dcss,function(responseTxt,statusTxt,xhr){alert("载入结束");}); //$("div#charu"+i.toString()).load( uu+" "+"div.main-body img"); //console.log(uu+" "+cs); GM_xmlhttpRequest({ method: "get", url: uu, headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function(r) { //alert("ok"); let dd=createDocumentByString(r.responseText); let aa=document.createElement("a"); aa.href=uu; let myimg=dd.querySelector(cs); //alert(myimg.hasAttribute("data-lazy-src")); if (myimg.hasAttribute("data-lazy-src")) myimg.src=(myimg.getAttributeNode("data-lazy-src").value); aa.appendChild(myimg); console.log(dd.querySelector(cs)); $("div#charu"+i.toString()).append(aa); // code } }); } } //GM_setValue(document.title,window.location.href); } if (a.id==4){//打开网站列表 addBox2(); } } div.appendChild(a) } }; //-------------------------------------------- //网站列表菜单构建函数 //-------------------------------------------- function addBox2() { // 主元素 var div = document.createElement('div') div.id = 'caidan-box2' div.style = "position: fixed; top: 120px; right: 20px; width: 150px; background-color: #EEEEEE; font-size: 12px;z-index: 99999;" // document.body.appendChild(div) document.body.insertAdjacentElement("afterBegin", div); // 标题 let title = document.createElement('span') title.innerText = "网站列表" title.style = "display: block; text-align: center; margin-top: 10px; font-size: 14px; font-weight: bold;" title.onclick = function () { $("div#caidan-box2").remove(); } div.appendChild(title) // 搜索支持网站列表 for (let index in urlMapping) { let item = urlMapping[index]; // 样式 let style = "display: block; padding: 10px 0 10px 20px; text-decoration: none;"; let defaultStyle = style + "color: #333333;"; let hoverStyle = style + "color: #ffffff; background-color: #666666;"; let a = document.createElement('a') a.href = 'javascript:;' a.innerText = item.myurl a.style = defaultStyle a.id = index // 鼠标移入移除效果,相当于hover a.onmouseenter = function () { this.style = hoverStyle } a.onmouseleave = function () { this.style = defaultStyle } a.onclick = function () { //菜单中按钮命令 //alert(a.id); window.location.href="https://"+item.myurl; } div.appendChild(a) } }; //-------------------------------------------- //--------------------------------------------------- 'use strict'; //逻辑:获取尾页连接——判断共多少页——重组各个网页连接——读取子页并将元素插入当前页 //-----------------------------------------主程序开始------------------------------------------------------------------------- //1、插入样式 //2、循环比对数据信息,完成插入分页图片 for (let index in urlMapping) { let item = urlMapping[index]; //判断当前页面url是否在数据中,在就插入图片 if( isin(item.myurl,window.location.href)>=0){ addstyle();//插入样式 admove(item.adcss);//移除广告 if (item.weiyecss=="") continue;//尾页css选择器为空就跳过 var hurl=getweiye(item.weiyecss); //取尾页地址 //console.log(hurl); var qian= getqianadd(hurl); //取前缀 //console.log(qian); var hou= gethouadd(hurl); //取后缀 //console.log(hou); var shu=getnum(hurl); //取张数 if ( shu<2 ) continue;//如果张数小于2跳过 //console.log(shu); charu(shu,qian,hou,item.charucss1,item.charucss2) } } //逻辑:找到节点——建立插入内容——插入节点 //查找节点:Document.querySelector(css选择器) //插入节点:Element.insertAdjacentHTML(position, text) //'beforebegin':元素自身的前面。'afterbegin':插入元素内部的第一个子节点之前。'beforeend':插入元素内部的最后一个子节点之后。'afterend':元素自身的后面。 //eg: d1.insertAdjacentHTML('afterend', '<div id="two">two</div>'); //3、插入菜单函数 window.onload = addBox; //不能直接给IMG标签加点击事件 //$("div.charu").click(function(){alert(this)}); //点击图片查看大图,实际通过点击图片外DIV实现 //--------------------------------------------------------------- $('div.charu').click(function(){ $(this).after("<div class='fangdaimg'></div>"); var imgSrc = this.querySelector("img").src $(".fangdaimg").css("background-image", "url(" + imgSrc + ")"); $('.fangdaimg').fadeIn(1000); //关闭并移除图层 $('.fangdaimg').click(function(){ $('.fangdaimg').fadeOut(1000).remove(); }); }); //----------------------------------------------------------------- //alert("脚本载入结束"); })();