一键复制美剧链接

识别常用网址的美剧链接,实现一键复制,美剧天堂修改按钮,多添加了一些网站,云盘可以直接进入,没有验证码不会显示undefined

目前為 2021-08-01 提交的版本,檢視 最新版本

// ==UserScript==
// @name         一键复制美剧链接
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  识别常用网址的美剧链接,实现一键复制,美剧天堂修改按钮,多添加了一些网站,云盘可以直接进入,没有验证码不会显示undefined
// @author       Bleu
// @supportURL   https://gf.qytechs.cn/zh-CN/scripts/430126-一键复制美剧链接/feedback
// @match        https://www.meijutt.tv/*
// @match        https://www.22tu.tv/*
// @match        https://www.kpkuang.com/*
// @match        https://www.mp4er.com/*
// @match        https://91mjw.com/*
// @match        https://www.bd2020.com/*
// @match        https://www.ttmeiju.org/*
// @match        https://yyds.fans/*
// @match        https://www.rrdyw.cc/*
// @match        https://pan.xunlei.com/s/*
// @match        https://pan.baidu.com/share/*
// @match        https://115.com/s/*
// @grant        GM_setClipboard
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_addStyle
// @grant        GM_openInTab
// @run-at       document-end
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js
/* globals jQuery, $, waitForKeyElements ,exit*/
// ==/UserScript==

(function () {
    'use strict';

    const webName = ['meijutt','91mjw','22tu','kpkuang','mp4er','ttmeiju','rrdyw'];
    const panArry = ['xunlei','baidu','115'];
    const pageURL = window.location.href;
    let sign;
    let cssStyle;
    let BleuButton;
    let buttParent;
    let openMark = 0;
    let oldParent = null;
    let panType = null;

    let toolbox = {

        addNewStyle() {
            if(sign === 'cloudPan'){return 0;}
            cssStyle = [
                '.btn_bleu{padding: 10px 25px;font-size: 16px;cursor: pointer;text-align: center;   text-decoration: none;outline: none;color: #fff;background-color: #008CBA;border: none;border-radius: 14px;display:block;margin:0 auto}',
                '.btn_bleu:hover{background-color: #008CEA}',
                '.btn_bleu:active{background-color: #008CEA;box-shadow: 0 5px #666;transform: translateY(4px);}'
            ];
            BleuButton = '<div><input type="button" class="btn_bleu" value="复制全部链接"></div>';
            cssStyle.forEach(function(value){
                GM_addStyle(value);
            });
        },

        getURLsign() {
            webName.forEach(function (value) {
                if (pageURL.search(value) >= 0) { sign = value }
            })
            if (sign == undefined) {
                //云盘界面
                sign = 'cloudPan';
            }
        },

        getButtonParent() {
            //公众号屏蔽
            let adshow = $("div.widget-weixin");
            if(adshow.length != 0){
                adshow.remove();
            }
            let box;
            switch(sign) {
                case 'meijutt':
                    $("div.widget-weixin").remove();
                    box = $("div.o_cn_r_box");
                    break;
                case '91mjw':
                    box = $(".down-list");
                    break;
                case '22tu':
                    box = $(".downurl.down-list");
                    break;
                case 'kpkuang':
                    box = $(".fed-down-item.fed-drop-item.fed-visible");
                    break;
                case 'mp4er':
                    box = $(".ui.middle.aligned.animated.list");
                    break;
                case 'ttmeiju':
                    box = $("div.box_bor3");
                    break;
                case 'rrdyw':
                    box = $(".movie-txt");
                    break;
                default:
                    break;
            }
            return box;
        },

        arryDel(arrold){
            var arr=[] ;
            arrold.forEach(function(value){
                if(arr.indexOf(value) == -1){
                    if(sign == 'kpkuang'){
                        value = decodeURIComponent(escape(window.atob(value.replace('data-clipboard-text="',''))));
                    }
                    arr.push(value);
                }
            })
            return arr;
        },

        getDownloadText(){
            let ulstr=buttParent.innerHTML;
            let reg = /magnet\:\?[^"]*|ed2k\:\/\/[^"]*|thunder\:\/\/[^"]*|data-clipboard-text="[^"]*/g;
            let s = ulstr.match(reg);
            return s == null ? s :this.arryDel(s);
        },

        findLinknode(buttdiv){
            buttParent = buttdiv
            if(sign == "meijutt"){
                for(let tabs of document.getElementsByClassName('tabs-list')){
                    if(tabs.getAttribute('style') == 'display: block;'||tabs.getAttribute('style') == null){return tabs ;}
                }
            }
            return buttParent;
        },


        noneLinkfunc(button){
            openMark++;
            if(sign === "mp4er"){
                $(button).attr('value','下载全部文件');
                (openMark === 1) ? alert("确定下载全部文件吗?共有"+$(buttParent).find('a').length+"个\r\n 再次点击确认"):(openMark = 0,$(buttParent).find("a").each(function(){this.click();}));
            }
            else if(sign === "meijutt"){
                $(button).attr('value','打开全部链接') ;
                if(openMark === 1||(openMark === 2 && oldParent != buttParent)){
                    openMark = 1
                    alert("确定打开所有链接吗?共有"+$(buttParent).find('li').length+"条\r\n 再次点击确认");
                    oldParent = buttParent;
                }
                if(openMark === 2 && oldParent === buttParent){//确定是同一标签下
                    openMark = 0;
                    if($(buttParent).find("input")){$(buttParent).find("input").each(function(){this.click();})};
                    if($(buttParent).find("a")){
                        $(buttParent).find("a").each(function(){
                            let href = $(this).attr('href');
                            href.indexOf("http") < 0 ? href = "https://www.meijutt.tv/"+href:href;
                            GM_openInTab(href, { active: true, insert: true, setParent :true });
                        });
                    };
                }
            }
            else{
                alert("没有复制任何链接");
            }
        },

        sleep(time) {
            return new Promise((resolve) => setTimeout(resolve, time));
        },

        isHidden(el) {
            try {
                return el.offsetParent === null;
            } catch (e) {
                return false;
            }
        },

        getHash(linkAddress){
            //处理迅雷百度云分享链接
            if(linkAddress == null){return 0}
            if(!(linkAddress.search("xunlei")>=0|| linkAddress.search("baidu")>=0)){return 0}
            let hashRex = /\/s\/[^?]*|surl=[^?]*/;
            let res = linkAddress.match(hashRex)[0].replace('surl=','');
            if (linkAddress.search("baidu") >= 0&&res.search("\/s\/") >=0 )
            {
                res = res.replace('\/s\/','').substr(1);
            }

            return res.replace('\/s\/','');
        },
        getPanType(){
            panArry.forEach(function (value) {
                if (pageURL.search(value) >= 0) { panType = value }
            })
        },




    }

    let linkHandler = {

        webWithPanLink(){
            let hash='',linkParent='',pswd='';

            if(pageURL.indexOf('bd2020') >= 0){
                let hide = document.querySelector('.layui-icon.layui-icon-down');
                hide? hide.click():1;
                linkParent =document.querySelectorAll('.option.copybtn.alert');
                linkParent.forEach((value)=>{
                    hash = toolbox.getHash($(value).find('a')[0].getAttribute('href'));
                    pswd = $(value).find('span')[0].innerHTML;
                    GM_setValue(hash,pswd);
                });
            }
            if(pageURL.indexOf('yyds') >= 0){
                linkParent =document.querySelector('.post-content').children;

                linkParent.forEach((value)=>{
                    let rex1 = /https.[^"]*/,rex2=/[\u4e00-\u9fa5]{3}:[\d\w]{4}/

                    value.innerHTML.match(rex2)?pswd = value.innerHTML.match(rex2)[0]:0;
                    value.innerHTML.match(rex1)?hash = toolbox.getHash(value.innerHTML.match(rex1)[0]):0;
                    pswd && hash ? GM_setValue(hash,pswd.replace(/[\u4e00-\u9fa5]{3}:/,'')):0;
                });
            }
            if(pageURL.indexOf('rrdyw') >= 0){
                linkParent =$('.movie-txt').children()
                linkParent = linkParent[linkParent.length-2];
                //$(linkParent).attr('txt','sf')
                let rex1 = /https:\/\/pan.[^"]*/g;
                let rex2=/[\u4e00-\u9fa5]{3}[:\s][\d\w]{4}/g;
                pswd = $(linkParent).find('span').text()
                pswd = pswd.match(rex2);
                hash = linkParent.innerHTML.match(rex1);
                hash.forEach(function(value,index){
                    GM_setValue(toolbox.getHash(value),pswd[index].replace(/[\u4e00-\u9fa5]{3}[:\s]/,''));
                })
            }
        },

        panListener(panInputSign,panBttonSign) {
            let asda = toolbox.getHash(pageURL);
            let password = GM_getValue(asda);
            let maxTime = 10;
            if(password == undefined){return 0}
            let listener = setInterval(async() => {
                maxTime--;
                let panInput = document.querySelector(panInputSign);
                let panBtton = document.querySelector(panBttonSign);
                if (panInput &&!toolbox.isHidden(panInput)){

                    clearInterval(listener);

                    let lastValue = panInput.value;
                    panInput.value = password;
                    //Vue & React 触发 input 事件===》 可行
                    /*let event = new Event('input', {bubbles: true});
                    let tracker = panInput._valueTracker;
                    if (tracker) {
                        tracker.setValue(lastValue);
                    }
                    panInput.dispatchEvent(event);*/
                    //js原生触发===》可行
                    var evt = document.createEvent('HTMLEvents')
                    evt.initEvent('input', true, true)
                    panInput.dispatchEvent(evt)
                    //jquery触发===》不可行
                    //$(panInput).bind('input propertychange', function() {$(this).val(lastValue);});

                    await toolbox.sleep(500); //1秒后点击按钮
                    panBtton.click();
                }
                else{
                    maxTime === 0 && clearInterval(listener);
                }
            }, 800);
        },
        clickPanButton(panBttonSign) {
            let maxTime = 10;
            let listener = setInterval(async() => {
                maxTime--;
                let panBtton = document.querySelector(panBttonSign);
                if (panBtton &&!toolbox.isHidden(panBtton)){
                    clearInterval(listener);
                    await toolbox.sleep(500); //1秒后点击按钮
                    panBtton.click();
                }
                else{
                    maxTime === 0 && clearInterval(listener);
                }
            }, 800);
        },

        autoOpenPan(){
            if(sign != 'cloudPan'){return 0;}
            let panInput,panBtton;
            if(panType === 'xunlei'){
                panInput='.pass-input-wrap .td-input__inner';
                panBtton='.pass-input-wrap .td-button';
            }
            if(panType === 'baidu'){
                panInput='#accessCode';
                panBtton='#submitBtn';
            }
            if(panType === '115'){
                panBtton='.button.btn-large';
            }
            panInput && panBtton ? linkHandler.panListener(panInput,panBtton):linkHandler.clickPanButton(panBtton);
        },

        //适配meijutt网站
        fixPanButton(){
            if(sign != "meijutt"){return 0;}
            let option = { active: true, insert: true, setParent :true };
            $('.copy-pw').each(function(){
                $(this).attr('value','点击进入');
                $(this).attr('href',$(this).next().attr('href'));
                $(this).next().remove();
            })
            $('.copy-pw').on('click',function(){
                GM_setClipboard($(this).attr('data'), 'text');
                let hash = toolbox.getHash($(this).attr('href'));
                GM_setValue(hash,$(this).attr('data'));
                GM_openInTab($(this).attr('href'), option);
            })
        },

        ButtonAddEvent(){
            $('.btn_bleu').on("click",function(){
                buttParent = toolbox.findLinknode(this.parentNode.parentNode);
                let arryAll = toolbox.getDownloadText();
                let arrytxt;
                arryAll == null ? toolbox.noneLinkfunc(this):(arrytxt = arryAll.toString().replace(/,/g,"\n"),GM_setClipboard(arrytxt, 'text'));
            });
        },

        processButton() {
            if(sign === 'cloudPan'){return 0;}
            buttParent = toolbox.getButtonParent();
            buttParent.append(BleuButton);
            this.ButtonAddEvent();
            this.fixPanButton();//适配meijutt网站
        },

        init(){
            toolbox.getURLsign();
            toolbox.getPanType();
            toolbox.addNewStyle();
            this.processButton();
            this.webWithPanLink();
            this.autoOpenPan();
        },
    }

    linkHandler.init();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址