Digit77 Helper

Digit77下载助手。自动复制提取码,跳过ouo.io的三秒等待时间!

当前为 2022-06-04 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Digit77 Helper
// @namespace    cn.XYZliang.digit77Helper
// @version      2.0
// @description  Digit77下载助手。自动复制提取码,跳过ouo.io的三秒等待时间!
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js
// @license      GNU General Public License v3.0
// @author       XYZliang
// @homepage     https://
// @match        https://www.digit77.com/*
// @match        http://www.digit77.com/*
// @match        https://ouo.press/*
// @match        http://ouo.press/*
// @match        https://ouo.io/*
// @match        http://ouo.io/*
// @match        https://app.mediatrack.cn/shares/*
// @match        http://app.mediatrack.cn/shares/*
// @match        https://download.kstore.space/download/2078/Digit77Helper/*
// @match        https://*.sharepoint.com/*
// @match        https://www.aliyundrive.com/*
// @match        https://cloud.189.cn/*
// @match        *://*.jxufesoftware.club/*
// @icon         https://www.digit77.com/lib/img/logo.svg
// @grant        unsafeWindow
// @grant        GM_setClipboard
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_xmlhttpRequest
// @grant        GM_notification
// @run-at       document-end
// @connect      *

// ==/UserScript==
/* globals jQuery, $ */

// 用户设置
let seeting = JSON.parse(GM_getValue("seeting"))
if (seeting == null || seeting.length == 0) {
    seeting == "{\"autofill\":true,\"ouo\":true,\"unzip\":true,\"fenmiaozhen\":true,\"baidu\":true,\"onedriver\":true,\"tianyi\":true,\"aliyun\":true,\"error\":true,\"fmzautofill\":true,\"fmzautodown\":true,\"fmzautofav\":false,\"fmzautosave\":false,\"bdautofill\":true,\"bdautodown\":true,\"bdautosave\":false,\"odautofill\":true,\"odautodown\":false,\"tyautofill\":true,\"tyautodown\":true,\"tyautosave\":false,\"alautofill\":true,\"alautodown\":true,\"alautosave\":false}"
    GM_setValue("seeting", seeting)
}
let values = GM_listValues()
if (values.length > 200) {
    for (let i = 0; i < datas.length; i++) {
        if (datas[i] != "seeting") {
            GM_deleteValue(datas[i])
        }
    }
    consoleLog("已自动清除缓存!")
}
// 脚本代码
'use strict';
let url = location.host;
consoleLog("Digit77 Helper 加载成功!")
if (url == "www.digit77.com" && seeting.autofill) {
    if ($("#history_version details").length > 0) {
        $("#history_version th")[2].innerText = "下载链接(已开启Digit77 Helper自动复制提取码)"
        $("#history_version a").each(function () {
            let codeText = this.innerHTML;
            let code = codeText.split(" ")[1]
            if (code != undefined) {
                let ouoLinkCode = (this.href).split("/")
                GM_setValue(ouoLinkCode[ouoLinkCode.length - 1], code);
                // this.addEventListener('click', function () {
                //     let text=code
                //     GM_setClipboard(text)
                // });
            }
        })
        let frontElement = $("#history_version details")[0]
        let insertHtml = '<details style="margin-top: 20px;">' +
            '<summary style="background-color: crimson;">Digit77 Helper设置</summary>' +
            ' <div class="table-wrapper" style="padding-right: 10px;overflow-x: hidden;">' +
            '<iframe src="https://download.kstore.space/download/2078/Digit77Helper/index.html" style="border: 5px solid #e835351a;border-radius: 10px;width: 100%;height: 400px;overflow-x: hidden;">' +
            '</iframe></div>' +
            '</details>'
        frontElement.insertAdjacentHTML('afterend', insertHtml);
    }
} else if (url == "download.kstore.space" || url.indexOf("jxufesoftware")!= -1) {
    consoleLog("进入设置页面!")
    document.getElementById("save").addEventListener('click', function () {
        let data = sumbit()
        GM_setValue("seeting", data);
        GM_notification("设置保存成功!", "Digit77 Helper")
    })
    document.getElementById("clean").addEventListener('click', function () {
        let datas = GM_listValues()
        // datas.array.forEach(element => {
        //     if (element != "seeting")
        //         GM_deleteValue(element)
        // });
        for (let i = 0; i < datas.length; i++) {
            if (datas[i] != "seeting") {
                GM_deleteValue(datas[i])
            }
        }
        GM_notification("设置清除成功!", "Digit77 Helper")
    })
    let inputs = $("#seeting input")
    inputs.each(function () {
        let key = this.id
        this.checked = seeting[key]
    })
    updateForm()
} else if (url.indexOf("ouo") != -1 && seeting.ouo) {
    consoleLog("正在跳过ouo")
    $(document).ready(function () {
        $("h4").innerText = "Digit77 Help正在跳过等待!"
        $(".btn-main").innerText = "欢迎使用Digit77 Helper"
    })
    if (location.pathname.split("/")[1] == "go") {
        let reallyUrlGeter = location.origin + "/xreallcygo/" + location.pathname.split("/")[2]
        let reallyUrlData = $("#form-go").serializeArray()
        GM_xmlhttpRequest({
            method: "POST",
            url: reallyUrlGeter,
            data: $.param(reallyUrlData),
            headers: {
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
            },
            onload: function (response) {
                let url = addGetParameter(response.finalUrl, "Digit77HelperPwd", GM_getValue(location.pathname.split("/")[2]))
                if (response.status == 200) {
                    //延长一下待在页面的时间,提升广告的佣金?
                    setTimeout(function () {
                        window.location.href = url
                    }, 1000)
                } else {
                    failedToGetJumpAddress(GM_getValue(location.pathname.split("/")[2]))
                }
            },
            onerror: function () {
                failedToGetJumpAddress(GM_getValue(location.pathname.split("/")[2]))
            }
        });
    } else {
        //延长一下待在页面的时间,提升广告的佣金?
        setTimeout(function () {
            $(".btn-main").click()
        }, 1500)
    }
} else if (url == "app.mediatrack.cn" && seeting.fenmiaozhen) {
    let pass = getUrlParam("Digit77HelperPwd")
    if ((pass != null || pass != "") && seeting.fmzautofill) {
        let code = (location.pathname).split("/")[2]
        let keyName = "mtweb_" + code + "password"
        let extractCodeThere = false
        if (localStorage.getItem(keyName) != null) {
            extractCodeThere = true
            consoleLog("提取码存在!延期提取码。")
        } else {
            extractCodeThere = false
            consoleLog("提取码不存在!注入提取码。")
        }
        //{"value":"9742","options":{"seconds":86400},"expiredAt":1654346827431,"createAt":1654260427431}
        let now = new Date().getTime()
        let expiredTime = 24 * 60 * 60
        let codeValue = {
            "value": pass,
            "options": {
                "seconds": expiredTime
            },
            "expiredAt": now + expiredTime * 1000,
            "createAt": now
        }
        window.localStorage.setItem(keyName, JSON.stringify(codeValue))
        consoleLog("已注入提取" + pass)
        if (!extractCodeThere) {
            window.location.reload()
        }
    } else {
        consoleLog("没有提取码或未打开功能!")
    }
    let time = setInterval(function () {
        let fun = document.getElementsByClassName("MuiButtonBase-root MuiButton-root MuiButton-contained btn normal")
        if (fun.length > 2) {
            if (seeting.fmzautodown) {
                fun[2].click()
                let time1 = setInterval(function () {
                    let downFun = document.getElementsByClassName("MuiButtonBase-root MuiButton-root MuiButton-contained jss167 MuiButton-containedPrimary")
                    if (downFun.length > 0) {
                        consoleLog("检测到下载框")
                        clearInterval(time1)
                        setTimeout(function () {
                            downFun[0].click()
                        }, 500)
                    }
                }, 333)
            }
            if (seeting.fmzautofav) {
                fun[0].click()
            }
            if (seeting.fmzautosave) {
                fun[1].click()
            }
            clearInterval(time)
        }
    }, 333)
} else if (url.indexOf("sharepoint.com") != -1 && seeting.onedriver) {
    if (location.pathname.indexOf("onedrive.aspx") == -1) {
        consoleLog("非下载页面")
        if (seeting.odautofill && getUrlParam("Digit77HelperPwd") != null) {
            document.getElementById("txtPassword").value = getUrlParam("Digit77HelperPwd")
            document.getElementById("btnSubmitPassword").click();
        }
    } else {
        consoleLog("下载页面")
        if (seeting.odautodown) {
            let time = setInterval(function () {
                let downFun = document.getElementsByName("下载")
                if (downFun.length > 0) {
                    consoleLog("检测到下载框")
                    clearInterval(time)
                    setTimeout(function () {
                        downFun[0].click()
                    }, 333)
                }
            }, 333)
        }
    }
} else if (url = "www.aliyundrive.com" && document.title == "阿里云盘分享" && seeting.aliyun) {
    function downSave() {
        let time = setInterval(function () {
            let downFun = document.getElementsByClassName("ant-dropdown-trigger")
            if (downFun.length > 0) {
                clearInterval(time)
                setTimeout(function () {
                    document.getElementsByClassName("ant-dropdown-trigger")[1].click()
                    if (seeting.alautodown) {
                        let time = setInterval(function () {
                            let downFun = $(":contains(下载)")
                            if (downFun.length > 10) {
                                consoleLog("检测到下载框")
                                clearInterval(time)
                                setTimeout(function () {
                                    downFun[downFun.length - 1].click()
                                }, 333)
                            }
                        }, 333)
                    }
                    if (seeting.alautosave) {
                        let time = setInterval(function () {
                            let saveFun = $(":contains(转存)")
                            if (saveFun.length > 5) {
                                consoleLog("检测到转存框")
                                clearInterval(time)
                                setTimeout(function () {
                                    saveFun[saveFun.length - 1].click()
                                }, 333)
                            }
                        }, 333)
                    }
                }, 333)
            }
        }, 333)

    }
    let time = setInterval(function () {
        let saveFun = $(":contains(下载)")
        if (saveFun.length > 5) {
            consoleLog("加载完成")
            clearInterval(time)
            if ($(":contains(极速查看文件)").length > 0 && seeting.alautofill) {
                let input = ['.ant-input', 'input[type="text"]']
                let button = ['.button--fep7l', 'button[type="submit"]']
                doFillAction(input, button, getUrlParam("Digit77HelperPwd"));
                downSave()
            } else {
                downSave()
            }
        }
    }, 333)
} else if (location.host == "cloud.189.cn" && seeting.tianyi) {
    function downSave() {
        if (seeting.tyautodown) {
            let time = setInterval(function () {
                let downFun = $(":contains(下载)")
                if (downFun.length > 10) {
                    consoleLog("检测到下载框")
                    clearInterval(time)
                    setTimeout(function () {
                        $(".btn-download")[0].click()
                    }, 333)
                }
            }, 333)
        }
        if (seeting.tyautosave) {
            let time = setInterval(function () {
                let saveFun = $(":contains(转存)")
                if (saveFun.length > 5) {
                    consoleLog("检测到转存框")
                    clearInterval(time)
                    setTimeout(function () {
                        document.getElementsByClassName("btn-save-as")[0].click()
                    }, 333)
                }
            }, 333)
        }
    }
    let time = setInterval(function () {
        let saveFun = $(":contains(属于私密分享)")
        if (saveFun.length > 5) {
            consoleLog("加载完成")
            clearInterval(time)
            let notice = $(":contains(属于私密分享)")
            setTimeout(function () {
                if ($(notice[notice.length - 1]).is(":visible") && seeting.tyautofill) {
                    var input = ['.access-code-item #code_txt']
                    var button = ['.access-code-item .visit']
                    doFillAction(input, button, getUrlParam("Digit77HelperPwd"));
                    downSave()
                } else {
                    downSave()
                }
            }, 1000)
        }
    }, 333)
}

function failedToGetJumpAddress(pwd) {
    if (!seeting.error) {
        return
    }
    GM_notification("获取ouo跳转链接失败!这导致无法自动填写提取码,请手动粘贴提取码!", "Digit77 helper错误")
    GM_setClipboard(pwd)
}

function addGetParameter(url, name, value) {
    url += (url.split("?")[1] ? "&" : "?") + name + "=" + value;
    return url;
}

function getUrlParam(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
    var r = window.location.search.substr(1).match(reg); //匹配目标参数
    if (r != null) return encodeURI(r[2]);
    return null; //返回参数值
}

function consoleLog(text) {
    console.log("%c" + text, "color: #ff0000; font-size: 16px; font-weight: bold;");
}

function insterScript(src, type) {
    var importJs = document.createElement('script') //在页面新建一个script标签
    importJs.setAttribute("type", type) //给script标签增加type属性
    importJs.setAttribute("src", src) //给script标签增加src属性, url地址为cdn公共库里的
    document.body.insertBefore(importJs, document.body.firstChild)
}

function sumbit() {
    let inputs = $("#seeting input")
    let datas = {}
    inputs.each(function () {
        datas[$(this).attr("id")] = this.checked
    })
    let data = JSON.stringify(datas)
    return data
}

function updateForm(notFirst = true) {
    let inputs = $("#seeting input")
    inputs.each(function () {
        let id = $(this).attr("id")
        switch (id) {
            case "fenmiaozhen":
                if (this.value == "on" || notFirst)
                    openfmz.click()
                break
            case "baidu":
                if (this.value == "on" || notFirst)
                    openbd.click()
                break
            case "onedriver":
                if (this.value == "on" || notFirst)
                    openod.click()
                break
            case "tianyi":
                if (this.value == "on" || notFirst)
                    openty.click()
                break
            case "aliyun":
                if (this.value == "on" || notFirst)
                    openal.click()
                break
        }
    })
}

let util = {
    clog(c) {
        console.group('[网盘智能识别助手]');
        console.log(c);
        console.groupEnd();
    },

    parseQuery(name) {
        let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        let r = location.search.substr(1).match(reg);
        if (r != null) return (r[2]);
        return null;
    },

    getValue(name) {
        return GM_getValue(name);
    },

    setValue(name, value) {
        GM_setValue(name, value);
    },

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

    addStyle(id, tag, css) {
        tag = tag || 'style';
        let doc = document,
            styleDom = doc.getElementById(id);
        if (styleDom) return;
        let style = doc.createElement(tag);
        style.rel = 'stylesheet';
        style.id = id;
        tag === 'style' ? style.innerHTML = css : style.href = css;
        document.head.appendChild(style);
    },

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

    query(selector) {
        if (Array.isArray(selector)) {
            let obj = null;
            for (let i = 0; i < selector.length; i++) {
                let o = document.querySelector(selector[i]);
                if (o) {
                    obj = o;
                    break;
                }
            }
            return obj;
        }
        return document.querySelector(selector);
    }
};

function doFillAction(inputSelector, buttonSelector, pwd) {
    let maxTime = 10;
    let ins = setInterval(async () => {
        maxTime--;
        let input = util.query(inputSelector);
        let button = util.query(buttonSelector);
        if (input && !util.isHidden(input)) {
            clearInterval(ins);
            let lastValue = input.value;
            input.value = pwd;
            //Vue & React 触发 input 事件
            let event = new Event('input', {
                bubbles: true
            });
            let tracker = input._valueTracker;
            if (tracker) {
                tracker.setValue(lastValue);
            }
            input.dispatchEvent(event);
            await util.sleep(500); //1秒后点击按钮
            button.click();

        } else {
            maxTime === 0 && clearInterval(ins);
        }
    }, 333);
}