Greasy Fork is available in English.
Digit77下载助手。自动复制提取码,跳过ouo.io的三秒等待时间!
// ==UserScript== // @name Digit77 Helper // @namespace cn.XYZliang.digit77Helper // @version 2.3 // @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 // @supportURL https://qianniuossplus.jxufesoftware.club/README.html // @homepage https://greasyfork.org/zh-CN/scripts/445961-digit77-helper // @match *://www.digit77.com/* // @match *://ouo.press/* // @match *://ouo.io/* // @match *://app.mediatrack.cn/shares/* // @match *://app.mediatrack.cn/shares/* // @match *://download.kstore.space/download/2078/Digit77Helper/* // @match *://*.sharepoint.com/* // @match *://www.aliyundrive.com/* // @match *://cloud.189.cn/* // @match *://*.jxufesoftware.club/* // @match *://www.wulihub.com.cn/gc/JPKAvA/* // @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 = GM_getValue("seeting") if (seeting == null || seeting.length == 0 || seeting == undefined || seeting) { 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) } seeting = JSON.parse(seeting) let values = GM_listValues() if (values.length > 200) { for (let i = 0; i < values.length; i++) { if (values[i] != "seeting") { GM_deleteValue(values[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.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 = $(":contains(确定)") if (downFun.length > 0) { consoleLog("检测到下载框") clearInterval(time1) setTimeout(function () { downFun[downFun.length -1].click() copyUnzipPwd() }, 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() copyUnzipPwd() }, 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() copyUnzipPwd() }, 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) } else { if ($(":contains(Helper设置)").length > 5) { 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() 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() } } 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 } }) } function copyUnzipPwd(){ GM.GM_setClipboard("digit77.com") } // 以下代码修改自 网盘智能识别助手 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); }