无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 1092|回复: 21
打印 上一主题 下一主题

[求助] 求明经论坛煽动大神CAD2026

[复制链接]
跳转到指定楼层
1#
发表于 2025-4-29 10:08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求明经论坛煽动大神CAD2026解压密码
123684.com/s/LBVSVv-EVa6d
原贴:bbs.mjtd.com/thread-192467-1-1.html

点评

已搞定,解压密码:BDGroup-lab.com  发表于 2025-4-29 10:33
2#
发表于 2025-4-29 10:26:40 | 只看该作者
用脚本识别
  1. // ==UserScript==
  2. // @name              网盘智能识别助手
  3. // @namespace     https://github.com/Magiclyan/panAI
  4. // @version           2.0.3.1
  5. // @author            Magiclyan,YouXiaoHou,52fisher
  6. // @description       智能识别选中文字中的🔗网盘链接和🔑提取码,识别成功打开网盘链接并自动填写提取码,省去手动复制提取码在输入的烦恼。支持识别 ✅百度网盘 ✅阿里云盘 ✅腾讯微云 ✅蓝奏云 ✅天翼云盘 ✅移动云盘 ✅迅雷云盘 ✅新123云盘 ✅360云盘 ✅115网盘 ✅奶牛快传 ✅城通网盘 ✅夸克网盘 ✅FlowUs息流 ✅Chrome 扩展商店 ✅Edge 扩展商店 ✅Firefox 扩展商店 ✅Windows 应用商店。
  7. // @license           AGPL-3.0-or-later
  8. // @homepage          https://www.youxiaohou.com/tool/install-panai.html
  9. // @supportURL        https://github.com/syhyz1990/panAI
  10. // @updateURL         https://www.youxiaohou.com/panai.user.js
  11. // @downloadURL       https://www.youxiaohou.com/panai.user.js
  12. // @match             *://*/*
  13. // @require           https://unpkg.com/sweetalert2@10.16.6/dist/sweetalert2.min.js
  14. // @require           https://unpkg.com/hotkeys-js@3.13.3/dist/hotkeys.min.js
  15. // @resource          swalStyle https://unpkg.com/sweetalert2@10.16.6/dist/sweetalert2.min.css
  16. // @run-at            document-idle
  17. // @grant             GM_openInTab
  18. // @grant             GM_setValue
  19. // @grant             GM_getValue
  20. // @grant             GM_registerMenuCommand
  21. // @grant             GM_getResourceText
  22. // @grant             GM_info
  23. // @icon              data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJNMTAzLjYgMTA3LjRjMy41LTIuMiA4LjktNi4xIDEzLjgtMTIuNXM3LjMtMTIuNSA4LjUtMTYuNWMuNS0xLjcgMi4yLTcuNSAyLjItMTQuNyAwLTEwLjEtMy4zLTI1LjEtMTUuNC0zNi44LTE0LjUtMTQtMzIuMS0xNC4zLTM1LjctMTQuMy04IDAtMTUuNyAxLjktMjIuNiA1LjJDNDQgMjMgMzUuNyAzMS40IDMwLjggNDEuN2MtMS4zIDIuOC00IDQuNy03LjEgNS00IC4zLTcuNSA0LjQtOC45IDkuNi0uNSAxLjktMS42IDMuNS0zLjEgNC43QzQuNCA2Ni44IDAgNzUuNyAwIDg1YzAgNi44IDIuMyAxMy4xIDYuMSAxOC4yIDUuNSA3LjQgMTQuMiAxMi4yIDI0IDEyLjJoNDcuMWM0LjQgMCAxMS0uNSAxOC4zLTMuNSAzLjItMS40IDUuOS0zIDguMS00LjV6IiBmaWxsPSIjNDQ0Ii8+PHBhdGggZD0iTTExOS44IDY0LjNjLjEtMTcuMS0xMC40LTI4LTEyLjUtMzAuMUM5NSAyMi4xIDc5LjkgMjEuOCA3Ni45IDIxLjhjLTE3LjYgMC0zMy4zIDEwLjUtMzkuOSAyNi43LS42IDEuMy0xLjggMi4zLTMuNCAyLjNoLS40Yy01LjggMC0xMC42IDQuOC0xMC42IDEwLjd2LjVjMCAxLjQtLjggMi42LTEuOSAzLjNDMTMuNCA2OSA4LjggNzYuOCA4LjggODVjMCAxMi4yIDkuOSAyMi4zIDIyLjIgMjIuM2g0NS4yYzMuNi0uMSAxNy42LS45IDI5LjYtMTIgMi45LTIuOCAxMy45LTEzLjcgMTQtMzF6IiBmaWxsPSIjZGI4NDEyIi8+PHBhdGggZD0iTTExMC44IDU3LjRsLjIgMy4zYzAgMS4zLTEuMSAyLjQtMi4zIDIuNC0xLjMgMC0yLjMtMS4xLTIuMy0yLjRsLS4xLTIuOHYtLjNjMC0xLjIuOS0yLjIgMi4xLTIuM2guM2MuNyAwIDEuMy4zIDEuNy43LS4yLjEuMy41LjQgMS40em0tMy4zLTEwLjNjMCAxLjItMSAyLjMtMi4yIDIuM2gtLjFjLS44IDAtMS42LS41LTItMS4yLTQuNi04LjMtMTMuMy0xMy41LTIyLjgtMTMuNS0xLjIgMC0yLjMtMS0yLjMtMi4ydi0uMWMwLTEuMiAxLTIuMyAyLjItMi4zaC4xYTMwLjM3IDMwLjM3IDAgMCAxIDE1LjggNC40YzQuNiAyLjggOC40IDYuOCAxMS4xIDExLjUuMS4zLjIuNy4yIDEuMXpNNjkuMiA0OWwxOS40IDE0LjhjMS45IDEuNSAzLjEgMy41IDMuNSA1Ljd2LjJjLjEuNC4xLjguMSAxLjIgMCAuNi0uMSAxLjEtLjIgMS42LS40IDIuMi0xLjcgNC4yLTMuNSA1LjZMNjkuMyA5M2MtMi42IDItNS40IDIuNS03LjcgMS40LS4xLS4xLS4yLS4xLS4yLS4yLTItMS4yLTMuMi0zLjUtMy4yLTYuNHYtNi42aC01LjdjLTYuOCAwLTEyLTQuNy0xMi0xMC45IDAtNC44IDIuNi04LjUgNy4yLTEwLjMgMS4zLS41IDIuNy4yIDMuMiAxLjVzLS4xIDIuOC0xLjQgMy4zYy0yLjcgMS4xLTQgMi45LTQgNS41IDAgMy41IDMgNiA3IDZoOC4xYy41IDAgMSAuMiAxLjQuNi43LjYgMS4xIDEuNyAxLjEgMi42djguNGMwIDEuMy40IDIgLjcgMi4xLjQuMiAxLjMgMCAyLjQtLjlsMTkuMi0xNC45YzEuMi0uOSAxLjgtMi4xIDEuOC0zLjNzLS42LTIuMy0xLjctMy4xTDY2LjIgNTNjLTEuMS0uOS0yLTEuMS0yLjQtLjktLjMuMi0uNy45LS43IDIuMXY3LjZjMCAuOS0uNSAxLjctMS4yIDIuMS0uNC4zLS44LjQtMS4zLjQtMS40IDAtMi41LTEuMS0yLjUtMi41di03LjZjMC0zLjEgMS4zLTUuNSAzLjUtNi42bC43LS4zYzIuMS0uNyA0LjYtLjEgNi45IDEuN3oiIGZpbGw9IiM0NDQiLz48L3N2Zz4=
  24. // ==/UserScript==

  25. (function () {
  26.     'use strict';

  27.     const customClass = {
  28.         container: 'panai-container',
  29.         popup: 'panai-popup',
  30.     };

  31.     let toast = Swal.mixin({
  32.         toast: true,
  33.         position: 'top',
  34.         showConfirmButton: false,
  35.         timer: 3500,
  36.         timerProgressBar: false,
  37.         didOpen: (toast) => {
  38.             toast.addEventListener('mouseenter', Swal.stopTimer);
  39.             toast.addEventListener('mouseleave', Swal.resumeTimer);
  40.         }
  41.     });

  42.     let util = {
  43.         clog(c) {
  44.             console.group("%c %c [网盘智能识别助手]", `background:url(${GM_info.script.icon}) center center no-repeat;background-size:12px;padding:3px`, "");
  45.             console.log(c);
  46.             console.groupEnd();
  47.         },

  48.         parseQuery(name) {
  49.             let reg = new RegExp(`(?<=(?:${name})\\=)(?:wss:[a-zA-Z0-9]+|[\\w-]+)`, "i")
  50.             let pd = location.href.replace(/%3A/g, ":").match(reg);
  51.             if (pd) {
  52.                 return pd[0];
  53.             }
  54.             return null;
  55.         },

  56.         getValue(name) {
  57.             return GM_getValue(name);
  58.         },

  59.         setValue(name, value) {
  60.             GM_setValue(name, value);
  61.         },

  62.         sleep(time) {
  63.             return new Promise((resolve) => setTimeout(resolve, time));
  64.         },

  65.         addStyle(id, tag, css) {
  66.             tag = tag || 'style';
  67.             let doc = document, styleDom = doc.getElementById(id);
  68.             if (styleDom) return;
  69.             let style = doc.createElement(tag);
  70.             style.rel = 'stylesheet';
  71.             style.id = id;
  72.             tag === 'style' ? style.innerHTML = css : style.href = css;
  73.             document.head.appendChild(style);
  74.         },

  75.         isHidden(el) {
  76.             try {
  77.                 return el.offsetParent === null;
  78.             } catch (e) {
  79.                 return false;
  80.             }
  81.         },

  82.         isMobile: (() => !!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone|HarmonyOS|MicroMessenger)/i))(),

  83.         query(selector) {
  84.             if (Array.isArray(selector)) {
  85.                 let obj = null;
  86.                 for (let i = 0; i < selector.length; i++) {
  87.                     let o = document.querySelector(selector[i]);
  88.                     if (o) {
  89.                         obj = o;
  90.                         break;
  91.                     }
  92.                 }
  93.                 return obj;
  94.             }
  95.             return document.querySelector(selector);
  96.         }
  97.     };

  98.     let opt = {
  99.         'baidu': {
  100.             reg: /((?:https?:\/\/)?(?:e?yun|pan)\.baidu\.com\/(doc\/|enterprise\/)?(?:s\/[\w~]*(((-)?\w*)*)?|share\/\S{4,}))/,
  101.             host: /(pan|e?yun)\.baidu\.com/,
  102.             input: ['#accessCode', '.share-access-code', '#wpdoc-share-page > .u-dialog__wrapper .u-input__inner'],
  103.             button: ['#submitBtn', '.share-access .g-button', '#wpdoc-share-page > .u-dialog__wrapper .u-btn--primary'],
  104.             name: '百度网盘',
  105.             storage: 'hash'
  106.         },
  107.         'aliyun': {
  108.             reg: /((?:https?:\/\/)?(?:(?:www\.)?(?:aliyundrive|alipan)\.com\/s|alywp\.net)\/[a-zA-Z\d]+)/,
  109.             host: /www\.(aliyundrive|alipan)\.com|alywp\.net/,
  110.             input: ['form .ant-input', 'form input[type="text"]', 'input[name="pwd"]'],
  111.             button: ['form .button--fep7l', 'form button[type="submit"]'],
  112.             name: '阿里云盘',
  113.             storage: 'hash'
  114.         },
  115.         'weiyun': {
  116.             reg: /((?:https?:\/\/)?share\.weiyun\.com\/[a-zA-Z\d]+)/,
  117.             host: /share\.weiyun\.com/,
  118.             input: ['.mod-card-s input[type=password]', 'input.pw-input'],
  119.             button: ['.mod-card-s .btn-main', ".pw-btn-wrap button.btn"],
  120.             name: '微云',
  121.             storage: 'hash'
  122.         },
  123.         'lanzou': {
  124.             reg: /((?:https?:\/\/)?(?:[a-zA-Z0-9\-.]+)?(?:lanzou[a-z]|lanzn)\.com\/[a-zA-Z\d_\-]+(?:\/[\w-]+)?)/,
  125.             host: /(?:[a-zA-Z\d-.]+)?(?:lanzou[a-z]|lanzn)\.com/,
  126.             input: ['#pwd'],
  127.             button: ['.passwddiv-btn', '#sub'],
  128.             name: '蓝奏云',
  129.             storage: 'hash'
  130.         },
  131.         'tianyi': {
  132.             reg: /((?:https?:\/\/)?cloud\.189\.cn\/(?:t\/|web\/share\?code=)?[a-zA-Z\d]+)/,
  133.             host: /cloud\.189\.cn/,
  134.             input: ['.access-code-item #code_txt', "input.access-code-input"],
  135.             button: ['.access-code-item .visit', ".button"],
  136.             name: '天翼云盘',
  137.             storage: (() => util.isMobile === true ? 'local' : 'hash')(),
  138.             storagePwdName: 'tmp_tianyi_pwd'
  139.         },
  140.         'caiyun': {
  141.             reg: /((?:https?:\/\/)?caiyun\.139\.com\/(?:m\/i|w\/i\/|web\/|front\/#\/detail)\??(?:linkID=)?[a-zA-Z\d]+)/,
  142.             host: /(?:cai)?yun\.139\.com/,
  143.             input: ['.token-form input[type=text]'],
  144.             button: ['.token-form .btn-token'],
  145.             name: '移动云盘',
  146.             storage: 'local',
  147.             storagePwdName: 'tmp_caiyun_pwd'
  148.         },
  149.         'xunlei': {
  150.             reg: /((?:https?:\/\/)?pan\.xunlei\.com\/s\/[\w-]{10,})/,
  151.             host: /pan\.xunlei\.com/,
  152.             input: ['.pass-input-wrap .td-input__inner'],
  153.             button: ['.pass-input-wrap .td-button'],
  154.             name: '迅雷云盘',
  155.             storage: 'hash'
  156.         },
  157. //  -- 失效的域名与匹配策略 --
  158. //      '123pan': {
  159. //          reg: /((?:https?:\/\/)?www\.123pan\.com\/s\/[\w-]{6,})/,
  160. //          host: /www\.123pan\.com/,
  161. //          input: ['.ca-fot input', ".appinput .appinput"],
  162. //          button: ['.ca-fot button', ".appinput button"],
  163. //          name: '123云盘',
  164. //          storage: 'hash'
  165. //        },
  166. //         '123865': {
  167. //            reg: /((?:https?:\/\/)?www\.123865\.com\/s\/[\w-]+(?:\?.*)?)/,
  168. //            host: /www\.123865\.com/,
  169. //            input: ['.ca-fot input', ".appinput .appinput"],
  170. //            button: ['.ca-fot button', ".appinput button"],
  171. //            name: '新123云盘(865)',
  172. //            storage: 'hash'
  173. //         },
  174. //        '123684': {
  175. //            reg: /((?:https?:\/\/)?www\.123684\.com\/s\/[\w-]+(?:\?.*)?)/,
  176. //            host: /www\.123684\.com/,
  177. //            input: ['.ca-fot input', ".appinput .appinput"],
  178. //            button: ['.ca-fot button', ".appinput button"],
  179. //            name: '新123云盘(684)',
  180. //            storage: 'hash'
  181. //        },
  182.          'New 123pan': {
  183.            reg: /((?:https?:\/\/)?www\.\d{6}\.com\/s\/[\w-]+(?:\?.*)?)/,
  184.            host: /www\.123*\.com/,
  185.            input: ['.ca-fot input', ".appinput .appinput"],
  186.            button: ['.ca-fot button', ".appinput button"],
  187.            name: '新123云盘',
  188.            storage: 'hash'
  189.         },        
  190.         '360': {
  191.             reg: /((?:https?:\/\/)?(?:[a-zA-Z\d\-.]+)?(?:yunpan\.360\.cn|yunpan\.com)(\/lk)?\/surl_\w{6,})/,
  192.             host: /[\w.]+?yunpan\.com/,
  193.             input: ['.pwd-input'],
  194.             button: ['.submit-btn'],
  195.             name: '360云盘',
  196.             storage: 'local',
  197.             storagePwdName: 'tmp_360_pwd'
  198.         },
  199.         '115': {
  200.             reg: /((?:https?:\/\/)?115\.com\/s\/[a-zA-Z\d]+)/,
  201.             host: /115\.com/,
  202.             input: ['.form-decode input'],
  203.             button: ['.form-decode .submit a'],
  204.             name: '115网盘',
  205.             storage: 'hash'
  206.         },
  207.         'cowtransfer': {
  208.             reg: /((?:https?:\/\/)?(?:[a-zA-Z\d-.]+)?cowtransfer\.com\/s\/[a-zA-Z\d]+)/,
  209.             host: /(?:[a-zA-Z\d-.]+)?cowtransfer\.com/,
  210.             input: ['.receive-code-input input'],
  211.             button: ['.open-button'],
  212.             name: '奶牛快传',
  213.             storage: 'hash'
  214.         },
  215.         'ctfile': {
  216.             reg: /((?:https?:\/\/)?(?:[a-zA-Z\d-.]+)?(?:ctfile|545c|u062|ghpym)\.com\/\w+\/[a-zA-Z\d-]+)/,
  217.             host: /(?:[a-zA-Z\d-.]+)?(?:ctfile|545c|u062)\.com/,
  218.             input: ['#passcode'],
  219.             button: ['.card-body button'],
  220.             name: '城通网盘',
  221.             storage: 'hash'
  222.         },
  223.         'quark': {
  224.             reg: /((?:https?:\/\/)?pan\.quark\.cn\/s\/[a-zA-Z\d-]+)/,
  225.             host: /pan\.quark\.cn/,
  226.             input: ['.ant-input'],
  227.             button: ['.ant-btn-primary'],
  228.             name: '夸克网盘',
  229.             storage: 'local',
  230.             storagePwdName: 'tmp_quark_pwd'
  231.         },
  232.         'vdisk': {
  233.             reg: /(?:https?:\/\/)?vdisk.weibo.com\/lc\/\w+/,
  234.             host: /vdisk\.weibo\.com/,
  235.             input: ['#keypass', "#access_code"],
  236.             button: ['.search_btn_wrap a', "#linkcommon_btn"],
  237.             name: '微盘',
  238.             storage: 'hash',
  239.         },
  240.         'wenshushu': {
  241.             reg: /((?:https?:\/\/)?(?:www\.wenshushu|ws28)\.cn\/(?:k|box|f)\/\w+)/,
  242.             host: /www\.wenshushu\.cn/,
  243.             input: ['.pwd-inp .ivu-input'],
  244.             button: ['.pwd-inp .ivu-btn'],
  245.             name: '文叔叔网盘',
  246.             storage: 'hash'
  247.         },
  248.         'uc': {
  249.             reg: /(?:https?:\/\/)?drive\.uc\.cn\/s\/[a-zA-Z\d]+/,
  250.             host: /drive\.uc\.cn/,
  251.             input: ["input[class*='ShareReceivePC--input']", '.input-wrap input'],
  252.             button: ["button[class*='ShareReceivePC--submit-btn'", '.input-wrap button'],
  253.             name: 'UC云盘',
  254.             storage: 'hash'
  255.         },
  256.         'jianguoyun': {
  257.             reg: /((?:https?:\/\/)?www\.jianguoyun\.com\/p\/[\w-]+)/,
  258.             host: /www\.jianguoyun\.com/,
  259.             input: ['input[type=password]'],
  260.             button: ['.ok-button', '.confirm-button'],
  261.             name: '坚果云',
  262.             storage: 'hash'
  263.         },
  264.         'wo': {
  265.             reg: /(?:https?:\/\/)?pan\.wo\.cn\/s\/[\w_]+/,
  266.             host: /(pan\.wo\.cn|panservice\.mail\.wo\.cn)/,
  267.             input: ['input.el-input__inner', ".van-field__control"],
  268.             button: ['.s-button', ".share-code button"],
  269.             name: '联通云盘',
  270.             storage: (() => util.isMobile === true ? 'local' : 'hash')(),
  271.             storagePwdName: 'tmp_wo_pwd'
  272.         },
  273.         'mega': {
  274.             reg: /((?:https?:\/\/)?(?:mega\.nz|mega\.co\.nz)\/#F?![\w!-]+)/,
  275.             host: /(?:mega\.nz|mega\.co\.nz)/,
  276.             input: ['.dlkey-dialog input'],
  277.             button: ['.dlkey-dialog .fm-dialog-new-folder-button'],
  278.             name: 'Mega',
  279.             storage: 'local'
  280.         },
  281.         '520vip': {
  282.             reg: /((?:https?:\/\/)?www\.(?:520-vip|eos-53)\.com\/file-\d+\.html)/,
  283.             host: /www\.520-vip\.com/,
  284.             name: '520云盘',
  285.         },
  286.         '567pan': {
  287.             reg: /((?:https?:\/\/)?www\.567(?:pan|yun|file|inc)\.(?:com|cn)\/file-\d+\.html)/,
  288.             host: /www\.567inc\.cn/,
  289.             name: '567盘',
  290.             replaceHost: "www.567inc.com",
  291.         },
  292.         'ayunpan': {
  293.             reg: /((?:https?:\/\/)?www\.ayunpan\.com\/file-\d+\.html)/,
  294.             host: /www\.ayunpan\.com/,
  295.             name: 'AYunPan',
  296.         },
  297.         'iycdn.com': {
  298.             reg: /((?:https?:\/\/)?www\.iycdn\.com\/file-\d+\.html)/,
  299.             host: /www\.iycdn\.com/,
  300.             name: '爱优网盘',
  301.         },
  302.         'feimaoyun': {
  303.             reg: /((?:https?:\/\/)?www\.feimaoyun\.com\/s\/[0-9a-zA-Z]+)/,
  304.             host: /www\.feimaoyun\.com/,
  305.             name: '飞猫盘',
  306.         },
  307.         'uyunp.com': {
  308.             reg: /((?:https?:\/\/)?download\.uyunp\.com\/share\/s\/short\/\?surl=[0-9a-zA-Z]+)/,
  309.             host: /download\.uyunp\.com/,
  310.             name: '优云下载',
  311.         },
  312.         'dudujb': {
  313.             reg: /(?:https?:\/\/)?www\.dudujb\.com\/file-\d+\.html/,
  314.             host: /www\.dudujb\.com/,
  315.             name: '贵族网盘',
  316.         },
  317.         'xunniu': {
  318.             reg: /(?:https?:\/\/)?www\.xunniu(?:fxp|wp|fx)\.com\/file-\d+\.html/,
  319.             host: /www\.xunniuwp\.com/,
  320.             name: '迅牛网盘',
  321.         },
  322.         'xueqiupan': {
  323.             reg: /(?:https?:\/\/)?www\.xueqiupan\.com\/file-\d+\.html/,
  324.             host: /www\.xueqiupan\.com/,
  325.             name: '雪球云盘',
  326.         },
  327.         '77file': {
  328.             reg: /(?:https?:\/\/)?www\.77file\.com\/s\/[a-zA-Z\d]+/,
  329.             host: /www\.77file\.com/,
  330.             name: '77file',
  331.         },
  332.         'ownfile': {
  333.             reg: /(?:https?:\/\/)?ownfile\.net\/files\/[a-zA-Z\d]+\.html/,
  334.             host: /ownfile\.net/,
  335.             name: 'OwnFile',
  336.         },
  337.         'feiyunfile': {
  338.             reg: /(?:https?:\/\/)?www\.feiyunfile\.com\/file\/[\w=]+\.html/,
  339.             host: /www\.feiyunfile\.com/,
  340.             name: '飞云网盘',
  341.         },
  342.         'yifile': {
  343.             reg: /(?:https?:\/\/)?www\.yifile\.com\/f\/\w+/,
  344.             host: /www\.yifile\.com/,
  345.             name: 'YiFile',
  346.         },
  347.         'dufile': {
  348.             reg: /(?:https?:\/\/)?dufile\.com\/file\/\w+\.html/,
  349.             host: /dufile\.com/,
  350.             name: 'duFile',
  351.         },
  352.         'flowus': {
  353.             reg: /((?:https?:\/\/)?flowus\.cn\/[\S ^\/]*\/?share\/[a-z\d]{8}-[a-z\d]{4}-[a-z\d]{4}-[a-z\d]{4}-[a-z\d]{12})/,
  354.             host: /flowus\.cn/,
  355.             name: 'FlowUs息流',
  356.             storage: 'hash'
  357.         },
  358.         'chrome': {
  359.             reg: /^https?:\/\/chrome.google.com\/webstore\/.+?\/([a-z]{32})(?=[\/#?]|$)/,
  360.             host: /chrome\.google\.com/,
  361.             replaceHost: "chrome.crxsoso.com",
  362.             name: 'Chrome商店',
  363.         },
  364.         'edge': {
  365.             reg: /^https?:\/\/microsoftedge.microsoft.com\/addons\/.+?\/([a-z]{32})(?=[\/#?]|$)/,
  366.             host: /microsoftedge\.microsoft\.com/,
  367.             replaceHost: "microsoftedge.crxsoso.com",
  368.             name: 'Edge商店',
  369.         },
  370.         'firefox': {
  371.             reg: /^https?:\/\/(reviewers\.)?(addons\.mozilla\.org|addons(?:-dev)?\.allizom\.org)\/.*?(?:addon|review)\/([^/<>"'?#]+)/,
  372.             host: /addons\.mozilla\.org/,
  373.             replaceHost: "addons.crxsoso.com",
  374.             name: 'Firefox商店',
  375.         },
  376.         'microsoft': {
  377.             reg: /^https?:\/\/(?:apps|www).microsoft.com\/(?:store|p)\/.+?\/([a-zA-Z\d]{10,})(?=[\/#?]|$)/,
  378.             host: /(apps|www)\.microsoft\.com/,
  379.             replaceHost: "apps.crxsoso.com",
  380.             name: 'Windows商店',
  381.         }
  382.     };

  383.     let main = {
  384.         lastText: "lorem&",

  385.         //初始化配置数据
  386.         initValue() {
  387.             let value = [{
  388.                 name: 'setting_success_times',
  389.                 value: 0
  390.             }, {
  391.                 name: 'setting_auto_click_btn',
  392.                 value: true
  393.             }, {
  394.                 name: 'setting_active_in_front',
  395.                 value: true
  396.             }, {
  397.                 name: 'setting_timer_open',
  398.                 value: false
  399.             }, {
  400.                 name: 'setting_timer',
  401.                 value: 5000
  402.             }, {
  403.                 name: 'setting_hotkeys',
  404.                 value: 'F1'
  405.             }];

  406.             value.forEach((v) => {
  407.                 if (util.getValue(v.name) === undefined) {
  408.                     util.setValue(v.name, v.value);
  409.                 }
  410.             });
  411.         },

  412.         // 监听选择事件
  413.         addPageListener() {
  414.             document.addEventListener("mouseup", this.smartIdentify.bind(this), true);
  415.             document.addEventListener("keydown", this.pressKey.bind(this), true);
  416.         },

  417.         // ⚠️可能会增加时间⚠️ 如果有需要可以增加选项
  418.         // 获取选择内容的HTML和文本(增加兼容性) 或 DOM(节点遍历)
  419.         getSelectionHTML(selection, isDOM = false) {
  420.             const testDiv = document.createElement("div");
  421.             if (!selection.isCollapsed) {
  422.                 // Range 转 DocumentFragment
  423.                 const docFragment = selection.getRangeAt(0).cloneContents();
  424.                 testDiv.appendChild(docFragment);
  425.             }
  426.             // 拼接选中文本,增加兼容
  427.             return isDOM ? testDiv : selection.toString();
  428.         },

  429.         smartIdentify(event, str = '') {
  430.             let selection = window.getSelection();
  431.             let text = str || this.getSelectionHTML(selection);
  432.             if (text !== this.lastText && text !== '') { //选择相同文字或空不识别
  433.                 let start = performance.now();
  434.                 this.lastText = text;
  435.                 //util.clog(`当前选中文字:${text}`);
  436.                 let linkObj = this.parseLink(text);
  437.                 let link = linkObj.link;
  438.                 let name = linkObj.name;
  439.                 let pwd = this.parsePwd(text);
  440.                 if (!link) {
  441.                     linkObj = this.parseParentLink(selection);
  442.                     link = linkObj.link;
  443.                     name = linkObj.name;
  444.                 }
  445.                 if (link) {
  446.                     if (!/https?:\/\//.test(link)) {
  447.                         link = 'https://' + link;
  448.                     }
  449.                     let end = performance.now();
  450.                     let time = (end - start).toFixed(3);
  451.                     util.clog(`文本识别结果:${name} 链接:${link} 密码:${pwd} 耗时:${time}毫秒`);
  452.                     let option = {
  453.                         toast: true,
  454.                         showCancelButton: true,
  455.                         position: 'top',
  456.                         title: `发现<span style="color: #2778c4;margin: 0 5px;">${name}</span>链接`,
  457.                         html: `<span style="font-size: 0.8em;">${!!pwd ? '密码:' + pwd : '是否打开?'}</span>`,
  458.                         confirmButtonText: '打开',
  459.                         cancelButtonText: '关闭',
  460.                         customClass
  461.                     };
  462.                     if (util.getValue('setting_timer_open')) {
  463.                         option.timer = util.getValue('setting_timer');
  464.                         option.timerProgressBar = true;
  465.                     }
  466.                     util.setValue('setting_success_times', util.getValue('setting_success_times') + 1);

  467.                     Swal.fire(option).then((res) => {
  468.                         this.lastText = 'lorem&';
  469.                         selection.empty();
  470.                         if (res.isConfirmed || res.dismiss === 'timer') {
  471.                             if (linkObj.storage == "local") {
  472.                                 util.setValue(linkObj.storagePwdName, pwd);
  473.                             }
  474.                             let active = util.getValue('setting_active_in_front');
  475.                             if (pwd) {
  476.                                 let extra = `${link}?pwd=${pwd}#${pwd}`;
  477.                                 if (~link.indexOf('?')) {
  478.                                     extra = `${link}&pwd=${pwd}#${pwd}`;
  479.                                 }
  480.                                 GM_openInTab(extra, {active});
  481.                             } else {
  482.                                 GM_openInTab(`${link}`, {active});
  483.                             }
  484.                         }
  485.                     });
  486.                 }
  487.             }
  488.         },

  489.         pressKey(event) {
  490.             if (event.key === 'Enter') {
  491.                 let confirmBtn = document.querySelector('.panai-container .swal2-confirm');
  492.                 confirmBtn && confirmBtn.click();
  493.             }
  494.             if (event.key === 'Escape') {
  495.                 let cancelBtn = document.querySelector('.panai-container .swal2-cancel');
  496.                 cancelBtn && cancelBtn.click();
  497.             }
  498.         },

  499.         addHotKey() {
  500.             //获取设置中的快捷键
  501.             let hotkey = util.getValue('setting_hotkeys');
  502.             hotkeys(hotkey, (event, handler) => {
  503.                 event.preventDefault();
  504.                 this.showIdentifyBox();
  505.             });
  506.         },

  507.         //正则解析网盘链接
  508.         parseLink(text = '') {
  509.             let obj = {name: '', link: '', storage: '', storagePwdName: ''};
  510.             if (text) {
  511.                 try {
  512.                     text = decodeURIComponent(text);
  513.                 } catch {
  514.                 }
  515.                 text = text.replace(/[点點]/g, '.');
  516.                 text = text.replace(/[\u4e00-\u9fa5()(),\u200B,\uD83C-\uDBFF\uDC00-\uDFFF]/g, '');
  517.                 text = text.replace(/lanzous/g, 'lanzouw'); //修正lanzous打不开的问题
  518.                 for (let name in opt) {
  519.                     let val = opt[name];
  520.                     if (val.reg.test(text)) {
  521.                         let matches = text.match(val.reg);
  522.                         obj.name = val.name;
  523.                         obj.link = matches[0];
  524.                         obj.storage = val.storage;
  525.                         obj.storagePwdName = val.storagePwdName || null;
  526.                         if (val.replaceHost) {
  527.                             obj.link = obj.link.replace(val.host, val.replaceHost);
  528.                         }
  529.                         return obj;
  530.                     }
  531.                 }
  532.             }
  533.             return obj;
  534.         },

  535.         //正则解析超链接类型网盘链接
  536.         parseParentLink(selection) {
  537.             const dom = this.getSelectionHTML(selection, true).querySelector('*[href]');
  538.             return this.parseLink(dom ? dom.href : "");
  539.         },

  540.         //正则解析提取码
  541.         parsePwd(text) {
  542.             text = text.replace(/\u200B/g, '').replace('%3A', ":");
  543.             text = text.replace(/(?:本帖)?隐藏的?内容[::]?/, "");
  544.             let reg = /wss:[a-zA-Z0-9]+|(?<=\s*(?:密|提取|访问|訪問|key|password|pwd|#|\?p=)\s*[码碼]?\s*[::=]?\s*)[a-zA-Z0-9]{3,8}/i;
  545.             if (reg.test(text)) {
  546.                 let match = text.match(reg);
  547.                 return match[0];
  548.             }
  549.             return '';
  550.         },

  551.         //根据域名检测网盘类型
  552.         panDetect() {
  553.             let hostname = location.hostname;
  554.             for (let name in opt) {
  555.                 let val = opt[name];
  556.                 if (val.host.test(hostname)) {
  557.                     return name;
  558.                 }
  559.             }
  560.             return '';
  561.         },

  562.         //自动填写密码
  563.         autoFillPassword() {
  564.             let query = util.parseQuery('pwd|p');
  565.             let hash = location.hash.slice(1).replace(/\W/g, "") //hash中可能存在密码,需要过滤掉非密码字符
  566.             let pwd = query || hash;
  567.             let panType = this.panDetect();
  568.             for (let name in opt) {
  569.                 let val = opt[name];
  570.                 if (panType === name) {
  571.                     if (val.storage === 'local') {
  572.                         //当前local存储的密码不一定是当前链接的密码,用户可能通过url直接访问或者恢复页面,这样取出来的密码可能是其他链接的
  573.                         //如果能从url中获取到密码,则应该优先使用url中获取的密码
  574.                         //util.getValue查询不到key时,默认返回undefined,已经形成逻辑短路,此处赋空值无效也无需赋空值.详见https://github.com/syhyz1990/panAI/commit/efb6ff0c77972920b26617bb836a2e19dd14a749
  575.                         pwd = pwd || util.getValue(val.storagePwdName);
  576.                         pwd && this.doFillAction(val.input, val.button, pwd);
  577.                     }
  578.                     if (val.storage === 'hash') {
  579.                         if (!/^(?:wss:[a-zA-Z\d]+|[a-zA-Z0-9]{3,8})$/.test(pwd)) { //过滤掉不正常的Hash
  580.                             return;
  581.                         }
  582.                         pwd && this.doFillAction(val.input, val.button, pwd);
  583.                     }
  584.                 }
  585.             }
  586.         },

  587.         doFillAction(inputSelector, buttonSelector, pwd) {
  588.             let maxTime = 10;
  589.             let ins = setInterval(async () => {
  590.                 maxTime--;
  591.                 let input = util.query(inputSelector);
  592.                 let button = util.query(buttonSelector);
  593.                 if (input && !util.isHidden(input)) {
  594.                     clearInterval(ins);
  595.                     Swal.fire({
  596.                         toast: true,
  597.                         position: 'top',
  598.                         showCancelButton: false,
  599.                         showConfirmButton: false,
  600.                         title: 'AI已识别到密码!正自动帮您填写',
  601.                         icon: 'success',
  602.                         timer: 2000,
  603.                         customClass
  604.                     });

  605.                     let lastValue = input.value;
  606.                     input.value = pwd;
  607.                     //Vue & React 触发 input 事件
  608.                     let event = new Event('input', {bubbles: true});
  609.                     let tracker = input._valueTracker;
  610.                     if (tracker) {
  611.                         tracker.setValue(lastValue);
  612.                     }
  613.                     input.dispatchEvent(event);

  614.                     if (util.getValue('setting_auto_click_btn')) {
  615.                         await util.sleep(1000); //1秒后点击按钮
  616.                         button.click();
  617.                     }
  618.                 } else {
  619.                     maxTime === 0 && clearInterval(ins);
  620.                 }
  621.             }, 800);
  622.         },

  623.         //重置识别次数
  624.         clearIdentifyTimes() {
  625.             let res = Swal.fire({
  626.                 showCancelButton: true,
  627.                 title: '确定要重置识别次数吗?',
  628.                 icon: 'warning',
  629.                 confirmButtonText: '确定',
  630.                 cancelButtonText: '取消',
  631.                 customClass
  632.             }).then(res => {
  633.                 this.lastText = 'lorem&';
  634.                 if (res.isConfirmed) {
  635.                     util.setValue('setting_success_times', 0);
  636.                     history.go(0);
  637.                 }
  638.             });
  639.         },

  640.         //识别输入框中的内容
  641.         showIdentifyBox() {
  642.             Swal.fire({
  643.                 title: '识别剪切板中文字',
  644.                 input: 'textarea',
  645.                 inputPlaceholder: '若选方式一,请按 Ctrl+V 粘贴要识别的文字',
  646.                 html: `<div style="font-size: 12px;color: #999;margin-bottom: 8px;text-align: center;">提示:在任意网页按下 <span style="font-weight: 700;">${util.getValue("setting_hotkeys")}</span> 键可快速打开本窗口。</div><div style="font-size: 14px;line-height: 22px;padding: 10px 0 5px;text-align: left;"><div style="font-size: 16px;margin-bottom: 8px;font-weight: 700;">支持以下两种方式:</div><div><b>方式一:</b>直接粘贴文字到输入框,点击“识别方框内容”按钮。</div><div><b>方式二:</b>点击“读取剪切板”按钮。<span style="color: #d14529;font-size: 12px;">会弹出“授予网站读取剪切板”权限,同意后会自动识别剪切板中的文字。</span></div></div>`,
  647.                 showCloseButton: false,
  648.                 showDenyButton: true,
  649.                 confirmButtonText: '识别方框内容',
  650.                 denyButtonText: '读取剪切板',
  651.                 customClass
  652.             }).then(res => {
  653.                 if (res.isConfirmed) {
  654.                     this.smartIdentify(null, res.value);
  655.                 }
  656.                 if (res.isDenied) {
  657.                     navigator.clipboard.readText().then(text => {
  658.                         this.smartIdentify(null, text);
  659.                     }).catch(() => {
  660.                         toast.fire({title: '读取剪切板失败,请先授权或手动粘贴后识别!', icon: 'error'});
  661.                     });
  662.                 }
  663.             });
  664.         },

  665.         //显示设置
  666.         showSettingBox() {
  667.             let html = `<div style="font-size: 1em;">
  668.                               <label class="panai-setting-label">填写密码后自动提交<input type="checkbox" id="S-Auto" ${util.getValue('setting_auto_click_btn') ? 'checked' : ''} class="panai-setting-checkbox"></label>
  669.                               <label class="panai-setting-label">前台打开网盘标签页<input type="checkbox" id="S-Active" ${util.getValue('setting_active_in_front') ? 'checked' : ''}
  670.                               class="panai-setting-checkbox"></label>
  671.                               <label class="panai-setting-label">倒计时结束自动打开<input type="checkbox" id="S-Timer-Open" ${util.getValue('setting_timer_open') ? 'checked' : ''} class="panai-setting-checkbox"></label>
  672.                               <label class="panai-setting-label" id="Panai-Range-Wrapper" style="${util.getValue('setting_timer_open') ? '' : 'display: none'}"><span>倒计时 <span id="Timer-Value">(${util.getValue('setting_timer') / 1000}秒)</span></span><input type="range" id="S-Timer" min="0" max="10000" step="500" value="${util.getValue('setting_timer')}" style="width: 200px;"></label>
  673.                               <label class="panai-setting-label">快捷键设置<input type="text" id="S-hotkeys" value="${util.getValue('setting_hotkeys')}" style="width: 100px;"></label>
  674.                             </div>`;
  675.             Swal.fire({
  676.                 title: '识别助手配置',
  677.                 html,
  678.                 icon: 'info',
  679.                 showCloseButton: true,
  680.                 confirmButtonText: '保存',
  681.                 footer: '<div style="text-align: center;font-size: 1em;">点击查看 <a href="https://www.youxiaohou.com/tool/install-panai.html" target="_blank">使用说明</a>,助手免费开源,Powered by <a href="https://www.youxiaohou.com">油小猴</a></div>',
  682.                 customClass
  683.             }).then((res) => {
  684.                 res.isConfirmed && history.go(0);
  685.             });

  686.             document.getElementById('S-Auto').addEventListener('change', (e) => {
  687.                 util.setValue('setting_auto_click_btn', e.target.checked);
  688.             });
  689.             document.getElementById('S-Active').addEventListener('change', (e) => {
  690.                 util.setValue('setting_active_in_front', e.target.checked);
  691.             });
  692.             document.getElementById('S-Timer-Open').addEventListener('change', (e) => {
  693.                 let rangeWrapper = document.getElementById('Panai-Range-Wrapper');
  694.                 e.target.checked ? rangeWrapper.style.display = 'flex' : rangeWrapper.style.display = 'none';
  695.                 util.setValue('setting_timer_open', e.target.checked);
  696.             });
  697.             document.getElementById('S-Timer').addEventListener('change', (e) => {
  698.                 util.setValue('setting_timer', e.target.value);
  699.                 document.getElementById('Timer-Value').innerText = `(${e.target.value / 1000}秒)`;
  700.             });
  701.             document.getElementById('S-hotkeys').addEventListener('change', (e) => {
  702.                 util.setValue('setting_hotkeys', e.target.value);
  703.             });
  704.         },

  705.         registerMenuCommand() {
  706.             GM_registerMenuCommand('&#128064; 已识别:' + util.getValue('setting_success_times') + '次', () => {
  707.                 this.clearIdentifyTimes();
  708.             });
  709.             GM_registerMenuCommand(`&#128203;️ 识别剪切板中文字(快捷键 ${util.getValue('setting_hotkeys')})`, () => {
  710.                 this.showIdentifyBox();
  711.             });
  712.             GM_registerMenuCommand('⚙️ 设置', () => {
  713.                 this.showSettingBox();
  714.             });
  715.         },

  716.         addPluginStyle() {
  717.             let style = `
  718.                 .panai-container { z-index: 99999!important }
  719.                 .panai-popup { font-size: 14px !important }
  720.                 .panai-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 20px; }
  721.                 .panai-setting-checkbox { width: 16px;height: 16px; }
  722.             `;

  723.             if (document.head) {
  724.                 util.addStyle('swal-pub-style', 'style', GM_getResourceText('swalStyle'));
  725.                 util.addStyle('panai-style', 'style', style);
  726.             }

  727.             const headObserver = new MutationObserver(() => {
  728.                 util.addStyle('swal-pub-style', 'style', GM_getResourceText('swalStyle'));
  729.                 util.addStyle('panai-style', 'style', style);
  730.             });
  731.             headObserver.observe(document.head, {childList: true, subtree: true});
  732.         },

  733.         isTopWindow() {
  734.             return window.self === window.top;
  735.         },

  736.         init() {
  737.             this.initValue();
  738.             this.addPluginStyle();
  739.             this.addHotKey();
  740.             this.autoFillPassword();
  741.             this.addPageListener();
  742.             this.isTopWindow() && this.registerMenuCommand();
  743.         },
  744.     };

  745.     main.init();
  746. })();
复制代码



点评

感谢分享!  详情 回复 发表于 2025-4-30 13:01
这个咋用的?  发表于 2025-4-30 09:43
回复

使用道具 举报

3#
发表于 2025-4-29 10:40:15 | 只看该作者
2026
https://www.123865.com/s/39zRVv-IKt7H?
提取码: ECt0

2025
https://www.123865.com/s/39zRVv-6ut7H?
提取码:iKqs

2024
https://www.123865.com/s/39zRVv-vUt7H?
提取码:KMj6


都是最新2025.4.27的这个版本的

点评

感谢分享  详情 回复 发表于 2025-5-2 11:45
谢谢。  详情 回复 发表于 2025-4-29 14:43
你这个AutoCAD 2026.0.1 珊瑚の海精简优化版 ,2025.4.27再次优化的,我想试试煽动大神的。  发表于 2025-4-29 12:31
回复

使用道具 举报

4#
发表于 2025-4-29 13:02:58 | 只看该作者
完美!!!!!!
回复

使用道具 举报

5#
发表于 2025-4-29 13:03:10 | 只看该作者
完美!!!!!~~~~~~~~~~~~
回复

使用道具 举报

6#
发表于 2025-4-29 13:20:40 | 只看该作者
谢谢2楼分享
回复

使用道具 举报

7#
发表于 2025-4-29 13:27:03 | 只看该作者

谢谢分享
回复

使用道具 举报

8#
发表于 2025-4-29 13:36:26 | 只看该作者

这个可以识别到解压缩密码?
回复

使用道具 举报

9#
发表于 2025-4-29 14:38:45 | 只看该作者
感 谢老铁感 谢老铁感 谢老铁
回复

使用道具 举报

10#
发表于 2025-4-29 14:41:06 | 只看该作者
感谢老铁!!
回复

使用道具 举报

11#
发表于 2025-4-29 14:43:17 | 只看该作者
qq8899399 发表于 2025-4-29 10:40
2026
https://www.123865.com/s/39zRVv-IKt7H?
提取码: ECt0

谢谢。
回复

使用道具 举报

12#
发表于 2025-4-30 09:18:54 | 只看该作者
谢谢分享谢谢分享
回复

使用道具 举报

13#
发表于 2025-4-30 09:20:31 | 只看该作者
谢谢老铁!!!
回复

使用道具 举报

14#
发表于 2025-4-30 11:28:23 | 只看该作者
珊瑚の海与煽动大神分别有什么特点区别的?
回复

使用道具 举报

15#
发表于 2025-4-30 11:36:36 | 只看该作者
我是刚装了4.24珊瑚の海的版本,要不要删了再装这个?不知更新了什么的
回复

使用道具 举报

16#
发表于 2025-4-30 11:53:36 | 只看该作者
和珊瑚海大神的有什么不同啊
回复

使用道具 举报

17#
发表于 2025-4-30 13:01:50 | 只看该作者

感谢分享!
回复

使用道具 举报

18#
发表于 2025-4-30 13:42:21 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

19#
发表于 2025-5-2 11:45:50 | 只看该作者
qq8899399 发表于 2025-4-29 10:40
2026
https://www.123865.com/s/39zRVv-IKt7H?
提取码: ECt0

感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-5-10 15:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表