您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
改编自脚本 JAV老司机
当前为
// ==UserScript== // @name JAVBUS封面大图 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 改编自脚本 JAV老司机 // @author kygo233 // @include https://www.javbus.com/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_download // @grant GM_setClipboard // @connect * // 2020-08-26 添加瀑布流 // 2020-08-24 第一版:封面大图、下载封面、查看视频截图 // ==/UserScript== (function() { 'use strict'; // 瀑布流状态:1:开启、0:关闭 let waterfallScrollStatus = GM_getValue('scroll_status', 0); let columnNum = GM_getValue('bigImg_columnNum', 3); let IMG_SUFFIX="-bigimg-tag"; let MAGNET_SUFFIX="-magnet-tag"; function ajaxGet(url,fn) { let xhr=new XMLHttpRequest(); xhr.open("GET",url); xhr.send(); xhr.onreadystatechange=function () { if (xhr.readyState==4&&xhr.status==200) { fn(xhr.responseText); } } } function addStyle(){ GM_addStyle([ '#waterfall_h {width: auto !important;height: auto !important;display: flex;flex-direction: row;flex-wrap: wrap;}', '#waterfall_h .item{position: relative !important;top: auto !important;left: auto !important;float: none;}', '#waterfall_h .movie-box {width: auto !important;height: auto !important;display: flex;flex-direction: column;}', '#waterfall_h .movie-box .photo-frame {width:auto !important;height:auto!important; flex-grow:1 !important;}', '#waterfall_h .movie-box img {width: 100% !important;; height: 100% !important;object-fit: contain !important;}', '.pop-up-tag{ margin-left:auto !important;margin-right:auto !important;display: block;}', '.big-img-a{float:right;cursor:pointer;margin-left:10px;}', ].join('')); GM_addStyle('#waterfall_h .item{ flex: '+100/columnNum+'%;}'); //添加bootstrap弹出框,用于显示磁力表格和视频截图, $('body').append('<div class="modal fade" id="myModal" role="dialog" >' +'<div class="modal-dialog" style="width:60% !important;" role="document" id="magnettablediv" ></div>'); //列数下拉框, var select_tag= $( '<select class="form-control " style="margin-top: 8px;" id="inputGroupSelect01">' + ' <option value="1">1列</option>' + ' <option value="2">2列</option>' + ' <option value="3">3列</option>' + ' <option value="4">4列</option>' + ' <option value="5">5列</option>' + ' </select>'); $(select_tag).find("option[value='"+columnNum+"']").attr("selected",true); $(select_tag).change(function(){ GM_setValue('bigImg_columnNum', $(this).val()); GM_addStyle('#waterfall .item.item { flex: '+100/columnNum+'%;}'); window.location.reload(); }); let li_elem = document.createElement('li'); $(li_elem).append($(select_tag)); $("#navbar ul.nav").first().append($(li_elem)); } //设置点击标签 function setTag(tag){ //替换封面为大图 Begin var photoDiv=$(tag).find("div.photo-frame")[0]; $(photoDiv).hide(); var img = $(photoDiv).children("img")[0]; var src= img.src; if(src.match(/pics.dmm.co.jp/)){ src=src.replace(/ps.jpg/,"pl.jpg"); }else { src=src.replace(/thumbs/,"cover").replace(/thumb/,"cover").replace(/.jpg/,"_b.jpg"); } var bigimg= new Image(); bigimg.src=src; $(photoDiv).append(bigimg); img.remove(); $(photoDiv).show(); //替换封面为大图 end var infoDiv=$(tag).find("div.photo-info")[0]; var spanTag=$(infoDiv).find("span")[0]; var AVIDDiv=$(infoDiv).find("date")[0]; var AVID=$(AVIDDiv).text(); var bigDivTag=$('<a href="javascript:;" class="big-img-a" >视频截图</a>'); var downloadDiv=$('<a href="javascript:;" class="big-img-a" >下载封面</a>'); var magnetDivTag=$('<a href="javascript:;" class="big-img-a" >磁力链接</a>'); $(spanTag).append(bigDivTag); $(spanTag).append(downloadDiv); $(spanTag).append(magnetDivTag); bigDivTag.click(function(){ if(bigDivTag.text()=="视频截图"){ showBigImg(AVID,bigDivTag); } }); downloadDiv.click(function(){ GM_download(src,AVID+".jpg"); }); magnetDivTag.click(function(){ showMagnetTable(AVID,src); }); } //显示视频截图 function showBigImg(avid,bigDivTag){ var img_id=avid+IMG_SUFFIX; $('.pop-up-tag').hide(); if($("#"+img_id).length>0){ $("#"+img_id).show(); $('#myModal').modal(); }else{ getAvImg(avid,bigDivTag); } } //获取视频截图 function getAvImg(avid,bigDivTag){ bigDivTag.text('加载中..'); //异步请求搜索blogjav.net的番号 GM_xmlhttpRequest({ method: "GET", url: 'http://blogjav.net/?s='+avid, onload: function(result) { var doc = result.responseText; let a_array = $(doc).find(".more-link"); let imgUrl; for(let i = 0; i < a_array.length ; i ++){ imgUrl = a_array[i].href; var fhd_idx = a_array[i].href.search(/FHD/g); if(fhd_idx > 0) { break;} } if (imgUrl) { GM_xmlhttpRequest({ method: "GET", url: imgUrl, headers:{ referrer: "http://pixhost.to/" //绕过防盗图的关键 }, onload: function(XMLHttpRequest) { var bodyStr = XMLHttpRequest.responseText; var img_src_arr =/<img .*src="https*:\/\/.*pixhost.to\/thumbs\/.*>/.exec(bodyStr); if( img_src_arr[0]) //如果找到内容大图 { var src = $(img_src_arr[0]).attr("src").replace('thumbs','images').replace('//t','//img').replace('"',''); console.log(src); var img_tag=$('<img class="pop-up-tag carousel-inner" id="'+avid+IMG_SUFFIX+'" src="'+src+'" />'); $('#magnettablediv').append(img_tag); $('#myModal').modal(); }else{ bigDivTag.text('无大图'); } bigDivTag.text('视频截图'); } });//end GM_xmlhttpRequest }else{ bigDivTag.text('无大图'); } } });//end GM_xmlhttpRequest }; //显示磁力表格 function showMagnetTable(avid,src){ var table_id="#"+avid+MAGNET_SUFFIX; $('.pop-up-tag').hide(); if($(table_id).length>0){ $(table_id).show(); $('#myModal').modal(); }else{ getMagnet(avid,src); } } //ajax 获取磁力链接 function getMagnet(avid,src){ var url= 'https://www.javbus.com/'+avid; ajaxGet(url,function(responseText){ var str=/var\s+gid\s+=\s+(\d{1,})/.exec(responseText); var gid=str[1]; url= 'https://www.javbus.com/ajax/uncledatoolsbyajax.php?gid='+gid+'&lang=zh&img='+src+'&uc=0&floor='+Math.floor(Math.random() * 1e3 + 1); ajaxGet(url,function(responseText){ var table_html=responseText.substring(0,responseText.indexOf('<script')).trim(); var table_tag=$('<table class="table pop-up-tag" style="background-color:#FFFFFF" id="'+avid+MAGNET_SUFFIX+'"></table>'); var tbody_jq= $(table_html); table_tag.append(tbody_jq); $('#magnettablediv').append(table_tag); $('#'+avid+MAGNET_SUFFIX).find("tr").each(function(i){ // 遍历 tr var me=this; var copyButton = $('<button>复制</button>'); var magent_url = $(me).find('a')[0].href; copyButton.click(function(){ var btn=this; btn.innerHTML = '成功'; GM_setClipboard(magent_url); setTimeout(function() { btn.innerHTML = '复制'; }, 1000); }); var td_tag=$('<td></td>'); td_tag.append(copyButton); $(me).prepend(td_tag); }); $('#myModal').modal(); }); }); }; class Lock { constructor(d = false) { this.locked = d; } lock() { this.locked = true; } unlock() { this.locked = false; } } function waterfallScrollInit() { var $pages = $('div#waterfall div.item'); if ($pages.length) { if(!location.pathname.includes('/actresses')){ GM_addStyle('#waterfall_h .avatar-box {width: auto !important;height: auto !important;display: flex;flex-direction: row;}'); $('#waterfall')[0].id="waterfall_h"; addStyle(); } waterfallButton(); var w = new waterfall({}); } }; function waterfall(selectorcfg = {}){ this.lock = new Lock(); this.baseURI = this.getBaseURI(); this.selector = { next: 'a#next', item: 'div#waterfall div.item', cont: '.masonry', pagi: '.pagination-lg', }; Object.assign(this.selector, selectorcfg); this.pagegen = this.fetchSync(location.href); this.anchor = $(this.selector.pagi)[0]; this._count = 0; this._1func = function (cont, elems) { cont.empty().append(elems); }; this._2func = function (cont, elems) { if (location.pathname.includes('/star/') && elems) { cont.append(elems.slice(1)); } else { cont.append(elems); } }; this._3func = function ( elems) { if(!location.pathname.includes('/actresses')){//排除actresses页面 for (let i = 0; i < elems.length; i++) { if($(elems[i]).find("div.avatar-box").length > 0) continue; setTag(elems[i]); } } }; if ($(this.selector.item).length) { // 开启关闭瀑布流判断 if(waterfallScrollStatus > 0) { document.addEventListener('scroll', this.scroll.bind(this)); document.addEventListener('wheel', this.wheel.bind(this)); } this.appendElems(this._1func); } } waterfall.prototype.getBaseURI = function () { let _ = location; return `${_.protocol}//${_.hostname}${(_.port && `:${_.port}`)}`; }; waterfall.prototype.getNextURL = function (href) { let a = document.createElement('a'); a.href = href; return `${this.baseURI}${a.pathname}${a.search}`; }; // 瀑布流脚本 waterfall.prototype.fetchURL = function (url) { console.log(`fetchUrl = ${url}`); const fetchwithcookie = fetch(url, {credentials: 'same-origin'}); return fetchwithcookie.then(response => response.text()) .then(html => new DOMParser().parseFromString(html, 'text/html')) .then(doc => { let $doc = $(doc); let href = $doc.find(this.selector.next).attr('href'); let nextURL = href ? this.getNextURL(href) : undefined; let elems = $doc.find(this.selector.item); return { nextURL, elems }; }); }; // 瀑布流脚本 waterfall.prototype.fetchSync = function* (urli) { let url = urli; do { yield new Promise((resolve, reject) => { if (this.lock.locked) { reject(); } else { this.lock.lock(); resolve(); } }).then(() => { return this.fetchURL(url).then(info => { url = info.nextURL; return info.elems; }) ; }).then(elems => { this.lock.unlock(); return elems; }).catch((err) => { // Locked! }); } while (url); }; // 瀑布流脚本 waterfall.prototype.appendElems = function () { let nextpage = this.pagegen.next(); if (!nextpage.done) { nextpage.value.then(elems => { const cb = (this._count === 0) ? this._1func : this._2func; cb($(this.selector.cont), elems); this._count += 1; this._3func(elems); }) ; } return nextpage.done; }; // 瀑布流脚本 waterfall.prototype.end = function () { document.removeEventListener('scroll', this.scroll.bind(this)); document.removeEventListener('wheel', this.wheel.bind(this)); let $end = $(`<h1>The End</h1>`); $(this.anchor).replaceWith($end); }; waterfall.prototype.reachBottom = function (elem, limit) { return (elem.getBoundingClientRect().top - $(window).height()) < limit; }; waterfall.prototype.scroll = function () { if (this.reachBottom(this.anchor, 500) && this.appendElems(this._2func)) { this.end(); } }; waterfall.prototype.wheel = function () { if (this.reachBottom(this.anchor, 1000) && this.appendElems(this._2func)) { this.end(); } }; function waterfallButton() { var checkbox = $('<a href="javascript:;" >瀑布流<input type="checkbox" /></a>'); checkbox.find("input")[0].checked=waterfallScrollStatus > 0?true:false; checkbox.click(function () { if ($(this).find("input")[0].checked==true) { GM_setValue('scroll_status', 1); } else { GM_setValue('scroll_status', 0); } window.location.reload(); }); let li_elem = document.createElement('li'); $(li_elem).append(checkbox); $("#navbar ul.nav").first().append($(li_elem)); } waterfallScrollInit(); // Your code here... })();