// ==UserScript== // @name 【玩的嗨】VIP工具箱,夸克网盘直链批量获取,获取B站封面,下载B站视频等众多功能聚合 长期更新,放心使用 // @namespace https://www.wandhi.com/ // @description 🔥功能介绍🔥:🎉 1、一站式音乐搜索解决方案;🎉 2、bilibili视频封面获取;🎉 3、bilibili视频下载(已支持分P下载);🎉 4、夸克网盘直链批量获取;🎉 5、CSDN页面、剪切板清理;🎉 6、页面自动展开(更多网站匹配中,欢迎提交想要支持的网站) 🎉7、YouTube视频下载🎉 8、中间页自动跳转;🎉 9、搜索引擎快速跳转 // @license MIT // @version 4.9.25 // @author MaxZhang // @exclude *://vip.wandhi.com/* // @match *://*blog.csdn.net/* // @match *://*download.csdn.net/* // @match *://*wenku.csdn.net/* // @match *://*c.pc.qq.com/middlem* // @match *://*pan.baidu.com/disk/main* // @match *://link.csdn.net/* // @match *://link.zhihu.com/* // @match *://browser.gwdang.com/* // @match *://*www.jianshu.com/go-wild* // @match *://*gitee.com/link* // @match *://*juejin.cn/?target* // @match *://www.aliyundrive.com/drive* // @match *://www.alipan.com/drive/* // @match *://*.youtube.com/watch?v=* // @match *://support.qq.com/products* // @match *://weibo.cn/sinaurl* // @match *://afdian.net/link* // @match *://*oschina.net/action/GoToLink* // @match *://jump2.bdimg.com/safecheck* // @match *://www.douban.com/link2/?url* // @match *://link.17173.com* // @match *://search.suning.com/* // @match *://pan.quark.cn/* // @match *://docs.qq.com/scenario/link* // @match *://mail.qq.com/cgi-bin/readtemplate* // @match *://cloud.tencent.com/developer/tools/blog-entry* // @match *://link.uisdc.com/* // @match *://*.tudou.com/listplay/* // @match *://*.tudou.com/albumplay/* // @match *://*.tudou.com/programs/view/* // @match *://*.tudou.com/v* // @match *://*.mgtv.com/b/* // @match *://film.sohu.com/album/* // @match *://tv.sohu.com/v/* // @match *://*.acfun.cn/v/* // @match *://*.bilibili.com/video/* // @match *://*.bilibili.com/anime/* // @match *://*.bilibili.com/bangumi/play/* // @match *://*.pptv.com/show/* // @match *://*.baofeng.com/play/* // @match *://*.wasu.cn/Play/show* // @match *://v.yinyuetai.com/video/* // @match *://v.yinyuetai.com/playlist/* // @match *://*.wasu.cn/Play/show/* // @match *://music.taihe.com/song* // @match *://music.163.com/song* // @match *://music.163.com/m/song* // @match *://y.qq.com/* // @match *://*.kugou.com/* // @match *://*.kuwo.cn/* // @match *://*.xiami.com/* // @match *://music.taihe.com/* // @match *://*.1ting.com/player* // @match *://www.qingting.fm/* // @match *://www.lizhi.fm/* // @match *://music.migu.cn/* // @match *://www.shangxueba.com/ask/*.html // @match *://www.ximalaya.com/* // @match *://www.shangxueba.com/ask/*.html // @match *://pan.baidu.com/disk/home* // @match *://yun.baidu.com/disk/home* // @match *://pan.baidu.com/s/* // @match *://yun.baidu.com/s/* // @match *://pan.baidu.com/share/link* // @match *://yun.baidu.com/share/link* // @match *://wenku.baidu.com/view/* // @match *://settings.wandhi.com/* // @match *://m.youku.com/v* // @match *://m.youku.com/a* // @match *://v.youku.com/v_* // @match *://v.youku.com/video* // @match *://v.youku.com/pad_show* // @match *://*.iqiyi.com/v_* // @match *://*.iqiyi.com/w_* // @match *://*.iqiyi.com/a_* // @match *://*.iqiyi.com/adv* // @match *://*.iq.com/play/* // @match *://*.le.com/ptv/vplay/* // @match *://v.qq.com/x/cover/* // @match *://v.qq.com/x/page/* // @match *://v.qq.com/*play* // @match *://v.qq.com/cover* // @match *://c.pc.qq.com/ios* // @match *://www.v2ex.com/t/* // @match *://*.nodeseek.com/jump* // @match *://*.zhihu.com/question* // @match *://www.baidu.com/* // @match *://www.google.com/* // @match *://www.sogou.com/* // @match *://www.so.com/s* // @match *://cn.bing.com/search* // @match *://sspai.com/link* // @match *://*.kdocs.cn/office/link* // @match *://ispacesoft.com/*.html // @match *://tv.wandhi.com/go.html* // @match *://tv.wandhi.com/check.html // @match *://*.xiaohongshu.com/explore* // @match *://www.yuque.com/r/goto* // @match *://blog.51cto.com/transfer* // @match *://r.wjx.com/redirect.aspx* // @match *://www.infoq.cn/link* // @match *://open.work.weixin.qq.com/wwopen/uriconfirm?uri= // @match *://link.gitcode.com/?target=* // @require https://lib.baomitu.com/jquery/1.12.4/jquery.min.js // @require https://lib.baomitu.com/limonte-sweetalert2/11.4.7/sweetalert2.all.min.js // @require https://lib.baomitu.com/echarts/4.6.0/echarts.min.js // @require https://lib.baomitu.com/layer/2.3/layer.js // @require https://lib.baomitu.com/qrcode-generator/1.4.4/qrcode.min.js // @require https://lib.baomitu.com/FileSaver.js/2.0.5/FileSaver.min.js // @require https://lib.baomitu.com/viewerjs/1.11.3/viewer.min.js // @require https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/react/18.2.0/umd/react.production.min.js // @require https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/react-dom/18.2.0/umd/react-dom.production.min.js // @require https://registry.npmmirror.com/@douyinfe/semi-ui/2.51.0/files/dist/umd/semi-ui.min.js // @grant GM_setClipboard // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_info // @grant GM_cookie // @grant GM_addStyle // @grant GM.addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM.getValue // @grant GM.setValue // @grant GM_notification // @grant GM_openInTab // @grant GM_deleteValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_download // @connect api.wandhi.com // @connect api.huizhek.com // @connect cdn.jsdelivr.net // @connect tool.manmanbuy.com // @connect gwdang.com // @connect scriptcat.org // @connect quark.cn // @connect openapi.baidu.com // @connect localhost // @connect pan.baidu.com // @connect api.bilibili.com // @compatible firefox // @compatible chrome // @compatible opera safari edge // @compatible safari // @compatible edge // @run-at document-end // @downloadURL none // ==/UserScript== (function(global, factory) { "object" == typeof exports && "undefined" != typeof module ? factory(require("react-dom"), require("sweetalert2"), require("@douyinfe/semi-ui"), require("react")) : "function" == typeof define && define.amd ? define([ "react-dom", "sweetalert2", "@douyinfe/semi-ui", "react" ], factory) : factory((global = "undefined" != typeof globalThis ? globalThis : global || self).ReactDOM, global.Swal, global.SemiUI, global.React); })(this, (function(ReactDOM, Swal, semiUi, React) { "use strict"; var ReactDOM__default, Swal__default, React__default, LogLevel, BrowerType, VersionResult, css_248z$5, ConfigEnum, Common, SiteEnum, css_248z$4, css_248z$3, Menu$2, css_248z$2, Menu$1, css_248z$1, css_248z, Menu; function _interopDefaultLegacy(e) { return e && "object" == typeof e && "default" in e ? e : { default: e }; } ReactDOM__default = _interopDefaultLegacy(ReactDOM), Swal__default = _interopDefaultLegacy(Swal), React__default = _interopDefaultLegacy(React); const container = new Map; class Container { static Registe(type, args) { let className = this.processName(type.name); return container.has(className) ? container.get(className) : className ? (container.set(className, window.Reflect.construct(type, args)), container.get(className)) : void 0; } static processName(name) { return name.toLowerCase(); } static Require(type) { return this.Registe(type, []); } } class Logger { static log(msg, group, level) {} static debug(msg, group = "debug") { this.log(msg, group, LogLevel.debug); } static info(msg, group = "info") { this.log(msg, group, LogLevel.info); } static warn(msg, group = "warning") { this.log(msg, group, LogLevel.warn); } static error(msg, group = "error") { this.log(msg, group, LogLevel.error); } } function __awaiter(thisArg, _arguments, P, generator) { return new (P || (P = Promise))((function(resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : function adopt(value) { return value instanceof P ? value : new P((function(resolve) { resolve(value); })); }(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); })); } !function(LogLevel) { LogLevel[LogLevel.debug = 0] = "debug", LogLevel[LogLevel.info = 1] = "info", LogLevel[LogLevel.warn = 2] = "warn", LogLevel[LogLevel.error = 3] = "error"; }(LogLevel || (LogLevel = {})), function(BrowerType) { BrowerType[BrowerType.Edge = 0] = "Edge", BrowerType[BrowerType.Edg = 1] = "Edg", BrowerType[BrowerType.Chrome = 2] = "Chrome", BrowerType[BrowerType.Firefox = 3] = "Firefox", BrowerType[BrowerType.Safiri = 4] = "Safiri", BrowerType[BrowerType.Se360 = 5] = "Se360", BrowerType[BrowerType.Ie2345 = 6] = "Ie2345", BrowerType[BrowerType.Baidu = 7] = "Baidu", BrowerType[BrowerType.Liebao = 8] = "Liebao", BrowerType[BrowerType.UC = 9] = "UC", BrowerType[BrowerType.QQ = 10] = "QQ", BrowerType[BrowerType.Sogou = 11] = "Sogou", BrowerType[BrowerType.Opera = 12] = "Opera", BrowerType[BrowerType.Maxthon = 13] = "Maxthon"; }(BrowerType || (BrowerType = {})), function(VersionResult) { VersionResult[VersionResult.less = -1] = "less", VersionResult[VersionResult.equal = 0] = "equal", VersionResult[VersionResult.greater = 1] = "greater", VersionResult[VersionResult.incomparable = NaN] = "incomparable"; }(VersionResult || (VersionResult = {})); class Core { constructor() { this.url = Core.currentUrl(); } static Render(element, id) { let container = document.getElementById(id); if (!container) { let script = unsafeWindow.window.document.createElement("div"); script.id = id, unsafeWindow.window.document.head.append(script), container = document.getElementById(id); } ReactDOM__default.default.render(element, container); } static appendTo(selector, html) { $(selector).append(html); } static prepend(selector, html) { $(selector).prepend(html); } static lazyload(callback, time = 5) { return __awaiter(this, void 0, void 0, (function*() { return new Promise(resolve => { setTimeout(() => __awaiter(this, void 0, void 0, (function*() { yield callback(), resolve(); })), 1e3 * time); }); })); } static autoLazyload(is_ok, callback, time = 5) { return __awaiter(this, void 0, void 0, (function*() { return new Promise(resolve => __awaiter(this, void 0, void 0, (function*() { is_ok() ? (yield callback(), Logger.debug("\u81ea\u52a8\u5ef6\u8fdf\u56de\u8c03\u6267\u884c\u5b8c\u6bd5,\u5ef6\u65f6\u65f6\u95f4:" + time), resolve()) : setTimeout(() => { Core.autoLazyload(is_ok, callback, time).then(() => resolve()); }, 1e3 * time); }))); })); } static sleep(time) { return new Promise(resolve => { setTimeout(() => { resolve(); }, 1e3 * time); }); } static random(min, max) { let range = max - min, rand = Math.random(); return min + Math.round(rand * range); } static randStr(len = 4) { let $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", maxPos = $chars.length, pwd = ""; for (let i = 0; i < len; i++) pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); return pwd; } static background(callback, time = 5) { setInterval(() => { callback(); }, 1e3 * time); } static get head() { return unsafeWindow.window.document.head; } static isNumber(a) { return !Array.isArray(a) && a - parseFloat(a) >= 0; } static addUrl(key, url) { GM_setValue(key, url); } static openUrl(key) { this.open(GM_getValue(key)); } static getPar(option, url = window.location.search) { let v = url.match(new RegExp("[?&]" + option + "=([^&]+)", "i")); return null == v || v.length < 1 ? "" : v[1]; } static appendCss(url) { let linkCSS = document.createElement("link"); linkCSS.type = "text/css", linkCSS.rel = "stylesheet", linkCSS.href = url, Core.head.appendChild(linkCSS); } static appendCssContent(content) { let Style = document.createElement("style"); Style.innerHTML = content, Core.head.appendChild(Style); } bodyAppendCss(url) { $("body").append($('')); } static bodyAppend(html) { $("body").append(html); } static bodyPrepend(html) { $("body").prepend(html); } static appendJs(url) { let linkScript = document.createElement("script"); linkScript.type = "text/javascript", linkScript.src = url, this.head.appendChild(linkScript); } bodyAppendJs(url) { $("body").append($('