this.$ = this.jQuery = jQuery.noConflict(true); // ==UserScript== // @name 云班课🆕答题小能手🥇(MeTo题库) // @namespace http://tampermonkey.net/ // @version 5.31 // @description 【🚀已兼容、新国开、蓝墨云、职教云、智慧职教、云班课精品课🚀】、【😎完美应付考试、测试,全自动答题,一键完成所有资源学习(视频挨个刷时长不存在滴)、视频倍速😎】、【💪新增AI搜题、AI问答,定制化服务💪】、【💙破除网站不可复制文字💙】、【🐮基于生成式AI(ChatGPT)的答案生成🐮】、【🔥一键导入题目🔥】、【🧡新增背题模式(遮挡答案,更好的进行考试复习)🧡】、【😭待支持网站:超星、学习通、智慧树、知到、慕课、U校园😭】、【欢迎加入qq群催更:😄286997695😄,共同交流进步,特别感谢MeTo题库提供题目搜索功能】。【💚作者在此保证,脚本无任何诸如(手机号,学校信息,等隐私信息)收集💚】 // @author 阿绿 // @note 致谢表:@凈仙人、@💪❤、@M_、@吃土豆长大的马铃薯、@悟虚、@台灯没电了、@Pumpkin、@小陈陈陈陈啊、@Sli、@无心人、@29827*0049、@热心解答(以上均是对此脚本做出过有效BUG提交OR提供账户帮助修复OR提供好的idea,如有遗漏请告知) // @match *://*.mosoteach.cn/* // @match *://*.chaoxing.com/* // @match *://*.xueyinonline.com/* // @match *://*.edu.cn/* // @match *://*.ouchn.cn/* // @match *://*.nbdlib.cn/* // @match *://*.hnsyu.net/* // @match *://*.gdhkmooc.com/* // @match *://*.zhihuishu.com/* // @match *://*.icve.com.cn/* // @match *://*.yuketang.cn/* // @match *://v.met0.top/* // @supportURL https://gitee.com/xiaolv12/yunbanke // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js // @icon https://bkimg.cdn.bcebos.com/pic/4ec2d5628535e5dde7114110e88eb0efce1b9c16c4e1 // @require https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @grant GM_getResourceText // @grant unsafeWindow // @grant GM_info // @grant GM_xmlhttpRequest // @grant GM_registerMenuCommand // @connect m.met0.top // @connect v.met0.top // @connect c.met0.top // @connect d.met0.top // @connect localhost // @connect 127.0.0.1 // @connect gitee.com // @connect * // @license MIT // @downloadURL none // ==/UserScript== (function () { (function($) { var tips = []; function handleWindowResize() { $.each(tips, function() { this.refresh(true); }); } $(window).resize(handleWindowResize); $.JPopBox = function(elm, options) { this.$elm = $(elm); this.opts = this.getOptions(options); var popBoxHtml=[]; popBoxHtml.push('
'); if(this.opts.title!=""){ popBoxHtml.push('
'+this.opts.title+'
'); } if(this.opts.isShowArrow){ popBoxHtml.push('
'); } popBoxHtml.push('
'), popBoxHtml.push('
'); this.$tip = $(popBoxHtml.join('')).appendTo(document.body); this.$arrow = this.$tip.find('div.JPopBox-tip-arrow'); this.$inner = this.$tip.find('div.JPopBox-tip-content'); this.disabled = false; this.content = null; this.init(); }; $.JPopBox.hideAll = function() { $.each(tips, function() { this.hide(); }); }; $.JPopBox.prototype = { getOptions:function(options){ options = $.extend({}, $.fn.jPopBox.defaults, options); if (options.delay && typeof options.delay == 'number') { options.delay = { show: options.delay, hide: options.delay }; } if (typeof options.offset == 'number') { options.offset = { X: options.offset, Y: options.offset }; } return options }, init: function() { tips.push(this); this.$elm.data('jPopBox', this); if (this.opts.trigger != 'none') { this.opts.trigger!="click" && this.$elm.on({ 'mouseenter.jPopBox': $.proxy(this.mouseenter, this), 'mouseleave.jPopBox': $.proxy(this.mouseleave, this) }); switch (this.opts.trigger) { case 'click': this.$elm.on('click.jPopBox', $.proxy(this.toggle, this)); break; case 'hover': if (this.opts.isTipHover) this.$tip.hover($.proxy(this.clearTimeouts, this), $.proxy(this.mouseleave, this)); break; case 'focus': this.$elm.on({ 'focus.jPopBox': $.proxy(this.showDelayed, this), 'blur.jPopBox': $.proxy(this.hideDelayed, this) }); break; } } }, toggle:function(){ var active=this.$tip.data('active'); if(!active) this.showDelayed(); else this.hideDelayed(); }, mouseenter: function(e) { if (this.disabled) return true; this.updateCursorPos(e); this.$elm.attr('title', ''); if (this.opts.trigger == 'focus') return true; this.showDelayed(); }, mouseleave: function(e) { if (this.disabled || this.asyncAnimating && (this.$tip[0] === e.relatedTarget || jQuery.contains(this.$tip[0], e.relatedTarget))) return true; if (this.opts.trigger == 'focus') return true; this.hideDelayed(); }, mousemove: function(e) { if (this.disabled) return true; this.updateCursorPos(e); if (this.opts.isFollowCursor && this.$tip.data('active')) { this.calcPos(); this.$tip.css({left: this.pos.l, top: this.pos.t}); } }, show: function() { this.$elm.trigger($.Event('show.jPopBox')); if (this.disabled || this.$tip.data('active')) return; this.reset(); this.update(); if (!this.content) return; this.display(); this.$elm.trigger($.Event('shown.jPopBox')); }, showDelayed: function(timeout) { this.clearTimeouts(); this.showTimeout = setTimeout($.proxy(this.show, this), typeof timeout == 'number' ? timeout:this.opts.delay.show); }, hide: function() { this.$elm.trigger($.Event('hide.jPopBox')); if (this.disabled || !this.$tip.data('active')) return; this.display(true); this.$elm.trigger($.Event('hidden.jPopBox')); }, hideDelayed: function(timeout) { this.clearTimeouts(); this.hideTimeout = setTimeout($.proxy(this.hide, this),typeof timeout == 'number' ? timeout :this.opts.delay.hide); }, reset: function() { this.$tip.queue([]).detach().css('visibility', 'hidden').data('active', false); this.$inner.find('*').jPopBox('hide'); this.$arrow.length && (this.$arrow[0].className = 'JPopBox-tip-arrow JPopBox-tip-arrow-top JPopBox-tip-arrow-right JPopBox-tip-arrow-bottom JPopBox-tip-arrow-left'); this.asyncAnimating = false; }, update: function(content, dontOverwriteOption) { if (this.disabled) return; var async = content !== undefined; if (async) { if (!dontOverwriteOption) this.opts.content = content; if (!this.$tip.data('active')) return; } else { content = this.opts.content; } // update content only if it has been changed since last time var self = this, newContent = typeof content == 'function' ? content.call(this.$elm[0], function(newContent) { self.update(newContent); }) : content; if (this.content !== newContent) { this.$inner.empty().append(newContent); this.content = newContent; } this.refresh(async); }, refresh: function(async) { if (this.disabled) return; if (async) { if (!this.$tip.data('active')) return; } this.$tip.css({left: 0, top: 0}).appendTo(document.body); if (this.opacity === undefined) this.opacity = this.$tip.css('opacity'); this.calcPos(); this.$tip.css({left: this.pos.l, top: this.pos.t}); }, display: function(hide) { var active = this.$tip.data('active'); if (active && !hide || !active && hide) return; this.$tip.stop(); var from = {}, to = {}; from.opacity = hide ? this.$tip.css('opacity') : 0; to.opacity = hide ? 0 : this.opacity; this.$tip.css(from).animate(to, 300); hide ? this.$tip.queue($.proxy(this.reset, this)) : this.$tip.css('visibility', 'inherit'); this.$tip.data('active', !active); }, disable: function() { this.reset(); this.disabled = true; }, enable: function() { this.disabled = false; }, destroy: function() { this.reset(); this.$tip.remove(); delete this.$tip; this.content = null; this.$elm.off('.jPopBox').removeData('jPopBox'); tips.splice($.inArray(this, tips), 1); }, clearTimeouts: function() { if (this.showTimeout) { clearTimeout(this.showTimeout); this.showTimeout = 0; } if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout = 0; } }, updateCursorPos: function(e) { this.eventX = e.pageX; this.eventY = e.pageY; }, calcPos: function() { this.tipOuterW = this.$tip.outerWidth(); this.tipOuterH = this.$tip.outerHeight(); var pos = {l: 0, t: 0, arrow: ''}, $win = $(window), win = { l: $win.scrollLeft(), t: $win.scrollTop(), w: $win.width(), h: $win.height() }, xL, xC, xR, yT, yC, yB,arrowOuterWH,placement,isAuto=false; var elmOffset = this.$elm.offset(), elm = { l: elmOffset.left, t: elmOffset.top, w: this.$elm.outerWidth(), h: this.$elm.outerHeight() }; xL = elm.l; // left xC = xL + Math.floor(elm.w / 2); // h center xR = xL + elm.w; // right yT = elm.t; // top yC = yT + Math.floor(elm.h / 2); // v center yB = yT +elm.h; // bottom placement=this.opts.placement; var autoReg=/\s?auto?\s?/i; isAuto=autoReg.test(placement); if (isAuto) placement = placement.replace(autoReg, '') || 'top'; //calc left position switch (placement) { case "top": case "bottom": pos.l = xC - Math.floor(this.tipOuterW / 2)-this.opts.offset.X; { if (pos.l + this.tipOuterW > win.l + win.w) pos.l = win.l + win.w - this.tipOuterW; else if (pos.l < win.l) pos.l = win.l; } break; case "right": arrowOuterWH=this.setArrowAndGetWH(placement); pos.l = xR + this.opts.offset.X+arrowOuterWH.W; if (isAuto && pos.l + this.tipOuterW > win.l + win.w){ arrowOuterWH=this.setArrowAndGetWH("left"); pos.l =xL - this.tipOuterW - this.opts.offset.X-arrowOuterWH.W; } break; case "left": arrowOuterWH=this.setArrowAndGetWH(placement); pos.l = xL - this.tipOuterW- this.opts.offset.X-arrowOuterWH.W; if (isAuto && pos.l < win.l){ arrowOuterWH=this.setArrowAndGetWH("right"); pos.l =xR + this.opts.offset.X+arrowOuterWH.W; } break; } //calc top position switch (placement) { case "top": arrowOuterWH=this.setArrowAndGetWH(placement); pos.t = yT - this.tipOuterH - this.opts.offset.Y-arrowOuterWH.H; if (isAuto && pos.t < win.t) { arrowOuterWH=this.setArrowAndGetWH("bottom"); pos.t = yB + this.opts.offset.Y+arrowOuterWH.H; } break; case "bottom": arrowOuterWH=this.setArrowAndGetWH(placement); pos.t = yB+ this.opts.offset.Y +arrowOuterWH.H; if (isAuto && pos.t + this.tipOuterH > win.t + win.h) { arrowOuterWH=this.setArrowAndGetWH("top"); pos.t = yT - this.tipOuterH - this.opts.offset.Y-arrowOuterWH.H; } break; case "right": case "left": pos.t = yC - Math.floor(this.tipOuterH / 2)-this.opts.offset.Y; { if (pos.t + this.tipOuterH > win.t + win.h){ pos.t = win.t + win.h - this.tipOuterH; } else if (pos.t < win.t) pos.t = win.t; } break; } this.pos = pos; }, setArrowAndGetWH:function(placement){ var arrowOuteWH={}; var W=0,H=0; if(this.$arrow.length){ this.$arrow.attr("class", "JPopBox-tip-arrow JPopBox-tip-arrow-" + placement); W = this.$arrow.outerWidth(); H = this.$arrow.outerHeight(); } arrowOuteWH.W=W; arrowOuteWH.H=H; return arrowOuteWH; } }; $.fn.jPopBox = function(options) { if (typeof options == 'string') { var args = arguments, method = options; Array.prototype.shift.call(args); if (method == 'destroy') { this.die ? this.die('mouseenter.jPopBox').die('focus.jPopBox') : $(document).undelegate(this.selector, 'mouseenter.jPopBox').undelegate(this.selector, 'focus.jPopBox'); } return this.each(function() { var jPopBox = $(this).data('jPopBox'); if (jPopBox && jPopBox[method]) jPopBox[method].apply(jPopBox, args); }); } var opts = $.extend({}, $.fn.jPopBox.defaults, options); if (!$('#jPopBox-css-' + opts.className)[0]) $([''].join('')).appendTo('head'); return this.each(function() { new $.JPopBox(this, opts); }); }; // default settings $.fn.jPopBox.defaults = { title:'', // 标题 content:'', // 弹出框内容 ('string', element, function(updateCallback){...}) className:'JPopBox-tip-white', // class名称 placement:'top', // 如何定位弹出框 (top|bottom|left|right|auto)。当指定为 auto 时,会动态调整弹出框。例如,如果 placement 是 "auto left",弹出框将会尽可能显示在左边,在情况不允许的情况下它才会显示在右边 delay:100, // 延迟显示和隐藏弹出框的毫秒数,对 trigger:none 手动触发类型不适用。如果提供的是一个数字,那么延迟将会应用于显示和隐藏。如果提供的是一个对象{ show: 500, hide: 100 },那么延迟将会分别应用于显示和隐藏 trigger:'hover', // 如何触发弹出框 ('click',hover', 'focus', 'none'),none为手动触发 offset:0, // 方向偏移量,值为负数时,将会反向偏移。如果提供的是一个数字,那么偏移量将会应用于X轴和Y轴。如果提供的是一个对象{ X:200, Y: 100 },那么偏移量将会分别应用于X轴和Y轴 isShowArrow:true, // 是否显示指向箭头 isTipHover:true // 是否允许在弹出框上移动,而不自动隐藏。只对trigger:hover有效。 }; })(jQuery); /** * 借鉴 网页限制解除(改) * 原作者 qxin i * 开源地址 https://greasyfork.org/zh-CN/scripts/28497-%E7%BD%91%E9%A1%B5%E9%99%90%E5%88%B6%E8%A7%A3%E9%99%A4-%E6%94%B9/code */ var settingData = { "status": 1, "version": 0.1, "message": "借鉴 网页限制解除(改)", "positionTop": "0", "positionLeft": "0", "positionRight": "auto", "addBtn": true, "connectToTheServer": false, "waitUpload": [], "currentURL": "null", "shortcut": 3, // 域名规则列表 "rules": { "rule_def": { "name": "default", "hook_eventNames": "contextmenu|select|selectstart|copy|cut|dragstart|mousemove|beforeunload", "unhook_eventNames": "mousedown|mouseup|keydown|keyup", "dom0": true, "hook_addEventListener": true, "hook_preventDefault": true, "hook_set_returnValue": true, "add_css": true }, "rule_plus": { "name": "default", "hook_eventNames": "contextmenu|select|selectstart|copy|cut|dragstart|mousedown|mouseup|mousemove|beforeunload", "unhook_eventNames": "keydown|keyup", "dom0": true, "hook_addEventListener": true, "hook_preventDefault": true, "hook_set_returnValue": true, "add_css": true }, "rule_zhihu": { "name": "default", "hook_eventNames": "contextmenu|select|selectstart|copy|cut|dragstart|mousemove", "unhook_eventNames": "keydown|keyup", "dom0": true, "hook_addEventListener": true, "hook_preventDefault": true, "hook_set_returnValue": true, "add_css": true } }, "data": [ "b.faloo.com", "bbs.coocaa.com", "book.hjsm.tom.com", "book.zhulang.com", "book.zongheng.com", "chokstick.com", "chuangshi.qq.com", "city.udn.com", "cutelisa55.pixnet.net", "huayu.baidu.com", "imac.hk", "life.tw", "luxmuscles.com", "news.missevan.com", "read.qidian.com", "www.15yan.com", "www.17k.com", "www.18183.com", "www.360doc.com", "www.coco01.net", "www.eyu.com", "www.hongshu.com", "www.hongxiu.com", "www.imooc.com", "www.jjwxc.net", "www.readnovel.com", "www.tadu.com", "www.xxsy.net", "www.z3z4.com", "www.zhihu.com", "yuedu.163.com", "www.ppkao.com", "movie.douban.com", "www.ruiwen.com", "vipreader.qidian.com", "www.pigai.org", "www.shangc.net", "www.myhtlmebook.com", "www.yuque.com", "www.longmabookcn.com", "www.alphapolis.co.jp", "www.sdifen.com", "votetw.com", "boke112.com", "www.myhtebooks.com", "www.xiegw.cn", "chuangshi.qq.com", "www.uta-net.com", "www.bimiacg.net" ] }; var rwl_userData = null; var hostname = window.location.hostname; var btn_node = null; var rule = null; var list = null; var hasFrame = false; // 储存名称 var storageName = "StorageName"; // 要处理的 event 列表 var hook_eventNames, unhook_eventNames, eventNames; // 储存被 Hook 的函数 var EventTarget_addEventListener = EventTarget.prototype.addEventListener; var document_addEventListener = document.addEventListener; var Event_preventDefault = Event.prototype.preventDefault; // 查看本地是否存在旧数据 rwl_userData = GM_getValue("rwl_userData"); if (!rwl_userData) { rwl_userData = settingData; // GM_setValue("rwl_userData",rwl_userData); } // 自动更新数据 for (let value in settingData) { if (!rwl_userData.hasOwnProperty(value)) { rwl_userData[value] = settingData[value]; GM_setValue("rwl_userData", rwl_userData); } } version_up_3_to_4(); // 获取黑名单网站 list = get_black_list(); // 添加按钮 // if(rwl_userData.addBtn){ // addBtn(); // 添加 btn_node = document.getElementById("black_node"); setTimeout(function () { qxinStart(); }, 500); // } // GM_registerMenuCommand("复制限制解除 设置", setMenu) var userSetting = GM_getValue("rwl_userData"); // // ------------------------------函数 func function qxinStart() { // addDragEven(); // setBtnClick(); // 检查是否在黑名单中 if (check_black_list(list)) { try { if (rwl_userData.addBtn) { btn_node.checked = true; } } catch (e) { } finally { init(); } } } // 初始化 init func 这里才是核心 function init() { // 针对个别网站采取不同的策略 rule = clear(); // 设置 event 列表 hook_eventNames = rule.hook_eventNames.split("|"); // TODO Allowed to return value unhook_eventNames = rule.unhook_eventNames.split("|"); eventNames = hook_eventNames.concat(unhook_eventNames); // 调用清理 DOM0 event 方法的循环 if (rule.dom0) { setInterval(clearLoop, 10 * 1000); setTimeout(clearLoop, 1500); window.addEventListener('load', clearLoop, true); clearLoop(); } // hook addEventListener //导致搜索跳转失效的原因 if (rule.hook_addEventListener) { EventTarget.prototype.addEventListener = addEventListener; document.addEventListener = addEventListener; if (hasFrame) { for (let i = 0; i < hasFrame.length; i++) { hasFrame[i].contentWindow.document.addEventListener = addEventListener; } } } // hook preventDefault if (rule.hook_preventDefault) { Event.prototype.preventDefault = function () { if (hook_eventNames.indexOf(this.type) < 0) { Event_preventDefault.apply(this, arguments); } }; if (hasFrame) { for (let i = 0; i < hasFrame.length; i++) { hasFrame[i].contentWindow.Event.prototype.preventDefault = function () { if (hook_eventNames.indexOf(this.type) < 0) { Event_preventDefault.apply(this, arguments); } }; } } } // Hook set returnValue if (rule.hook_set_returnValue) { Event.prototype.__defineSetter__('returnValue', function () { if (this.returnValue !== true && hook_eventNames.indexOf(this.type) >= 0) { this.returnValue = true; } }); } // 添加CSS // console.debug('url: ' + url, 'storageName:' + storageName, 'rule: ' + rule.name); if (rule.add_css) { GM_addStyle('html, :not([class*="rwl-exempt"]) {-webkit-user-select:text!important; -moz-user-select:text!important;} :not([class*="rwl-exempt"]) ::selection {color:#fff; background:#3390FF!important;}'); } //else { //GM_addStyle('html, :not([class*="rwl-exempt"]) {-webkit-user-select:text!important; -moz-user-select:text!important;}'); //} } // Hook addEventListener proc function addEventListener(type, func, useCapture) { var _addEventListener = this === document ? document_addEventListener : EventTarget_addEventListener; if (hook_eventNames.indexOf(type) >= 0) { _addEventListener.apply(this, [type, returnTrue, useCapture]); } else if (unhook_eventNames.indexOf(type) >= 0) { var funcsName = storageName + type + (useCapture ? 't' : 'f'); if (this[funcsName] === undefined) { this[funcsName] = []; _addEventListener.apply(this, [type, useCapture ? unhook_t : unhook_f, useCapture]); } this[funcsName].push(func); } else { _addEventListener.apply(this, arguments); } } // 清理循环 function clearLoop() { rule = clear(); // 对于动态生成的节点,随时检测 var elements = getElements(); for (var i in elements) { for (var j in eventNames) { var name = 'on' + eventNames[j]; // ;?未解决 // 2018-04-02 elements中会有字符串出现,原版不会,问题不明,根本原因尚未解决 // 相关反馈 https://greasyfork.org/zh-CN/forum/discussion/36014 // 问题版本号 v3.0.7 // 问题补充 之前可以使用,具体版本未测(2018-04-02 21:27:53),原版可以使用 if (Object.prototype.toString.call(elements[i]) == "[object String]") { continue; } // console.log(elements[i]) // if(typeof elements[i][name] === "object"){ // console.log(typeof elements[i][name]) // } if (elements[i][name] !== null && elements[i][name] !== onxxx) { if (unhook_eventNames.indexOf(eventNames[j]) >= 0) { elements[i][storageName + name] = elements[i][name]; elements[i][name] = onxxx; } else { elements[i][name] = null; } } } } document.onmousedown = function () { return true; }; } // 返回true的函数 function returnTrue(e) { return true; } function unhook_t(e) { return unhook(e, this, storageName + e.type + 't'); } function unhook_f(e) { return unhook(e, this, storageName + e.type + 'f'); } function unhook(e, self, funcsName) { var list = self[funcsName]; for (var i in list) { list[i](e); } e.returnValue = true; return true; } function onxxx(e) { var name = storageName + 'on' + e.type; this[name](e); e.returnValue = true; return true; } // 获取所有元素 包括document function getElements() { var elements = Array.prototype.slice.call(document.getElementsByTagName('*')); elements.push(document); // 循环所有 frame 窗口 var frames = document.querySelectorAll("frame"); if (frames) { hasFrame = frames; var frames_element; for (let i = 0; i < frames.length; i++) { frames_element = Array.prototype.slice.call(frames[i].contentWindow.document.querySelectorAll("*")); elements.push(frames[i].contentWindow.document); elements = elements.concat(frames_element); } } return elements; } // 获取黑名单网站 Func function get_black_list() { // 之前版本可能导致存储空的字符串 // 2018-06-11 15:11:44 保留,当容错处理 var data_temp = rwl_userData.data; data_temp = data_temp.filter(function (item) { return item.length > 1; }); return data_temp; } // 检查是否存在于黑名单中 返回位置 func function check_black_list(list, host) { for (let i = 0; i < list.length; i++) { if (~hostname.indexOf(list[i])) { return i + 1; //万一匹配到第一个,返回0 } } return false; } // 数组去重 function unique(arr) { var ret = []; for (var i = 0; i < arr.length; i++) { var item = arr[i]; if (ret.indexOf(item) === -1) { ret.push(item); } } return ret; } // 复制到剪贴板 function setClipboard() { var text_obj = window.getSelection(); var text = text_obj.toString(); GM_setClipboard(text); } // 快捷键 F1(ctrl+f1) 复制 function hotkey() { var a = window.event.keyCode; // if ((a == 112) && (event.ctrlKey)) { if (a == 112 && userSetting.shortcut == 1) { event.preventDefault(); setClipboard(); event.keyCode = 0; event.returnValue = false; return false; } else if (a == 112 && (event.ctrlKey) && userSetting.shortcut == 2) { setClipboard(); } else if ((a == 67) && (event.ctrlKey) && userSetting.shortcut == 3) { setClipboard(); } else { console.log("关闭了快捷键"); } } document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数 // 部分网站采用了其他的防复制手段 function clear() { // console.log("进入clear",hostname,rwl_userData.rules); switch (hostname) { case "chuangshi.qq.com": clear_chuangshi(); break; case "votetw.com": clear_votetw(); break; case "www.myhtebooks.com": clear_covers(".fullimg"); break; case "www.z3z4.com": clear_covers(".moviedownaddiv"); break; case "huayu.baidu.com": clear_covers("#jqContextMenu"); break; case "www.myhtlmebook.com": clear_covers("img.fullimg"); break; case "zhihu.com": case "www.zhihu.com": return rwl_userData.rules.rule_zhihu; case "t.bilibili.com": clear_link_bilibili(); break; case "www.uslsoftware.com": clear_covers(".protect_contents-overlay"); clear_covers(".protect_alert"); return rwl_userData.rules.rule_plus; case "www.longmabookcn.com": clear_covers(".fullimg"); return rwl_userData.rules.rule_plus; case "boke112.com": return rwl_userData.rules.rule_plus; case "www.shangc.net": return rwl_userData.rules.rule_plus; } return rwl_userData.rules.rule_def; } // 去除覆盖层 function clear_covers(ele) { var odiv = document.querySelector(ele); if (odiv) { odiv.parentNode.removeChild(odiv); } } // b站将文字嵌套在链接中 function clear_link_bilibili() { var odiv = document.querySelector(".description"); if (odiv) { var tDiv = odiv.querySelector(".content-ellipsis"); odiv.querySelector("a"); odiv.appendChild(tDiv); } } // https://votetw.com/wiki/%E6%9E%97%E6%99%BA%E5%A0%85 // 会创建多个无id,无class的div,覆盖在文字上层 function clear_votetw() { var odivs = document.querySelectorAll(".mw-parser-output>div"); odivs.forEach(function (value) { value.setAttribute("style", ""); }); } // 创世中文网 function clear_chuangshi() { console.log("创世中文网 开始执行"); } // 3.x.x 过渡 4.x.x 版本 function version_up_3_to_4() { var old_version = GM_getValue("black_list"); if (!old_version) { return } rwl_userData.data = unique(rwl_userData.data.concat(old_version.data)); GM_setValue("rwl_userData", rwl_userData); GM_deleteValue("black_list"); GM_deleteValue("rwl_userdata"); } /** * 原作者 wyn665817@163.com * 开源地址 https://scriptcat.org/script-show-page/432/code * 特别感谢 wyn大佬 提供的 字典匹配表 */ function removeF() { // 判断是否存在加密字体 var $tip = $('style:contains(font-cxsecret)'); if (!$tip.length) return; // 解析font-cxsecret字体 var font = $tip.text().match(/base64,([\w\W]+?)'/)[1]; font = Typr.parse(base64ToUint8Array(font))[0]; // 匹配解密字体 var table = JSON.parse(GM_getResourceText('Table')); var match = {}; for (var i = 19968; i < 40870; i++) { // 中文[19968, 40869] $tip = Typr.U.codeToGlyph(font, i); if (!$tip) continue; $tip = Typr.U.glyphToPath(font, $tip); $tip = MD5(JSON.stringify($tip)).slice(24); // 8位即可区分 match[i] = table[$tip]; } // 替换加密字体 $('.font-cxsecret').html(function (index, html) { $.each(match, function (key, value) { key = String.fromCharCode(key); key = new RegExp(key, 'g'); value = String.fromCharCode(value); html = html.replace(key, value); }); return html; }).removeClass('font-cxsecret'); // 移除字体加密 function base64ToUint8Array(base64) { var data = window.atob(base64); var buffer = new Uint8Array(data.length); for (var i = 0; i < data.length; ++i) { buffer[i] = data.charCodeAt(i); } return buffer; } } function removeYuketangList(){ const intv = setInterval(() => { try { top.document.querySelector('.exam').__vue__.handleHangUpTip = function () { }; const querySelector = top.document.querySelector; top.document.querySelector = function (...args) { if (args[0] === '#hcSearcheModal') return false return querySelector.call(this, ...args) }; clearInterval(intv); } catch (e) { } }, 100); } function start() { try {removeYuketangList();}catch (e){} setTimeout(function () { try {removeF();} catch (e) {} try {init();} catch (e) {} }, 1000); } function getDefaultConfig() { const defaultConfig = { auto_search: false,//自动搜索 auto_close: true,//自动关闭 remove_limit: false,//解除限制 fixed_modal: true,//基于浏览器布局 custom_style_on: true, in_setting: false,//是否在设置页面 custom_style: "", out_iframe: true, model:{ select:"默认", "答题":`我想让你扮演一名做题家,我将会对你发起提问,你的任务是给出具体的答案并说明理由。我的题目是“{msg}”`, "翻译":`下面我让你来充当翻译家,你的目标是把任何语言翻译成中文,请翻译时不要带翻译腔,而是要翻译得自然、流畅和地道,使用优美和高雅的表达方式。请翻译下面这句话:“{msg}”`, "默认":`{msg}`, "自定义1":``, "自定义2":``, } }; //去查找接口设置 默认 if (GM_getValue("defaultConfig") === undefined) { GM_setValue("defaultConfig", JSON.stringify(defaultConfig)); } return JSON.parse(GM_getValue("defaultConfig")) } let options = getDefaultConfig(); function getToken() { if (typeof GM_getValue("token") === 'string') { return GM_getValue("token") } else { return '' } } window.addEventListener("message", function (event) { if (event.data.type === 'search') { addModal2(createFrameLoading(), false); searchWord(event.data.wd).then(res => { addModal2(res, false, false); }); } else { if (event.data.type === 'auto_close') { options.auto_close = event.data.auto_close; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'auto_search') { options.auto_search = event.data.auto_search; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'remove_limit') { let copy = Object.assign(options); copy.remove_limit = event.data.remove_limit; GM_setValue("defaultConfig", JSON.stringify(copy)); } else if (event.data.type === 'fixed_modal') { options.fixed_modal = event.data.fixed_modal; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'out_iframe') { options.out_iframe = event.data.out_iframe; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'select_msg_model') { options.model.select = event.data.select_msg_model; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'update_msg_model') { options.model[event.data.select_msg_model] = event.data.update_msg_model; GM_setValue("defaultConfig", JSON.stringify(options)); } else if (event.data.type === 'login') { } else if (event.data.type === 'captcha') { } else if (event.data.type === 'checkVersion') { GM_setValue("version", JSON.stringify(event.data.version)); } } }, false); let POPOVER_ID = 'hcSearchePopover'; let MODAL_ID = 'hcSearcheModal'; let mouseX = 0; let mouseY = 0; let _self = unsafeWindow, top$1 = _self, UE = _self.UE; var SearchPanel = { getOptions: function () { return options }, show: function (word) { options.in_setting = false; addModal2(createFrameLoading(), options.auto_close === true); searchWord(word).then(res => { }); }, showWordSearch() { options.auto_close = false; GM_setValue("defaultConfig", JSON.stringify(options)); // addModal2("https://v.met0.top/", false, false); searchWord("").then(res => { //addModal2(res, false, false); }); }, setting: function () { options.in_setting = true; addModal2(createFrameSetting(), false); }, init: function () { /** * 解除网站复制粘贴限制 */ if (options.remove_limit) relieveLimit(); //页面始终保持再最外层document top$1 = options.out_iframe ? searchOutDocument(_self, top$1) : top$1; top$1.document.addEventListener('mouseup', mouseUp); top$1.document.addEventListener('mousemove', function (e) { mouseX = e.clientX; mouseY = e.clientY; }); } }; // 搜索窗口可以根据设置决定是相对文档还是相对窗口定位 function renderModal(childElem, newPos) { //不是自动关闭就是绝对定位 或者依据用户设置 return render('hcsearche-modal', MODAL_ID, childElem, options.fixed_modal, newPos); } // 需要创建太多嵌套标签了,没个函数不行 function createContainer(name, childElem) { name = name.toLowerCase(); let elem = top$1.document.createElement(name); elem.style.display = 'block'; // id 改成驼峰式 elem.id = name.replace('hcsearche', 'hcSearche').replace(/\-[a-z]/g, function (w) { return w.replace('-', '').toUpperCase(); }); if (childElem) { if (Array.isArray(childElem) === false) childElem = [childElem]; for (let i = 0; i < childElem.length; i++) elem.appendChild(childElem[i]); } return elem; } /** * isFixed 是否相对浏览器可视区域定位 * newPos 是否更新定位(如果元素已经存在的话 */ function render(tagName, elemId, childElem, isFixed, newPos) { console.log('开始渲染 model', isFixed); let doc = top$1.document; let elem = doc.getElementById(elemId); if (elem) { elem.innerHTML = ''; } else { elem = doc.createElement(tagName); elem.id = elemId; doc.body.appendChild(elem); } let contentNode = createContainer(tagName + '-container', childElem); elem.appendChild(contentNode); // class ID same elem.classList.add(elemId); let X = false; let Y = false; if (!newPos) { X = elem.style.left.replace('px', ''); console.log(X, "X"); Y = elem.style.top.replace('px', ''); } if (!X) { let pos = getXY(elem.offsetWidth, elem.offsetHeight); X = pos.X; Y = pos.Y; // 相对文档定位时需要将文档滚动距离加上 if (!isFixed) { Y += window.pageYOffset; } } elem.style.position = isFixed ? 'fixed' : 'absolute'; elem.style.left = X + 'px'; elem.style.top = Y + 'px'; setTimeout(function () { elem.classList.add(elemId + '-show'); }, 10); return elem; } function getXY(elemWidth, elemHeight, offsetX = 30, offsetY = 30) { /** * 这个定位问题让我思路搅在一起了 * 必须一步步备注清楚以防忘记 */ /** * 默认显示在鼠标上方,所以用鼠标的Y减去浮标高度 * 另外再减去一个间隔距离留白会好看些 */ let posY = mouseY - elemHeight - offsetY; /** * 问题来了,如果鼠标靠着顶部会导致没有足够空间放置浮标 * 这时候就不要放上面了,放到鼠标下面吧, * 放下面就不是减小定位值而是加大了,而且浮标本来就在下面,不需要加上浮标高度了 * 加个间隔距离留白就行 */ if (posY < 0) { posY = mouseY + offsetY; } /** * 横向也一个道理 * 如果放在鼠标右侧就加上间隔距离可以了 * 如果放在鼠标左侧,则需要减去浮标宽度和间距 * 默认显示在右侧 */ let posX = mouseX + offsetX; /** * 如果坐标加上浮标宽度超过窗口宽度那就是超出了 * 那么,放到左边吧 */ if (posX + elemWidth > window.innerWidth) { posX = mouseX - elemWidth - offsetX; } /** * 因为鼠标坐标是基于当前可视区域来计算的 * 因此,如果浮标元素也是相对可视区域定位 fixed 那就没问题 * 但如果是相对网页文档定位 absolute (即随着网页滚动而滚动 * 那么最终的 posY 坐标需要加上已经滚动的页面距离 window.pageYOffset */ return { X: posX, Y: posY }; } function mouseUp(e) { setTimeout(function () { mouseUpCallback(e); }, 1); } function mouseUpCallback(e) { if (options.auto_close === true) { removeTemplate(MODAL_ID, e.target); } e = e || window.event; mouseX = e.clientX; mouseY = e.clientY; let txt = window.getSelection().toString().trim(); if (txt && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA') ; else { autoRemoveTemplate(e); } } function autoRemoveTemplate(e) { // console.log('autoRemoveTemplate') removeTemplate(POPOVER_ID, false); /** * 只有开启自动关闭才会自动移除搜索窗口 */ if (options.auto_close === true) { removeTemplate(MODAL_ID, e.target); } } // 临时锁定 function lockClick() { // toggle options options.auto_close = !options.auto_close; // toggle class this.classList.toggle('hcSearcheModalLocked', options.auto_close === false); } function linkCloseClick() { removeTemplate(MODAL_ID); } function createFrameLoading() { let html = ` MeTo `; html += ` `; return html; } function addModal2(html, newPos, footerChildNode = false,chat=false) { // header link let linksNode = createContainer('hcsearche-modal-links'); let linkNode = top$1.document.createElement('hcsearche-link'); linkNode.setAttribute('title', '有不懂的请点我'); linkNode.setAttribute('data-seindex', 0); linkNode.setAttribute('data-seclass', 'baidu'); linkNode.innerHTML = 'MeToGPT'; linkNode.setAttribute('data-securrent', 'true'); linkNode.style.color = '#586069'; linkNode.addEventListener('click', function () { window.open('https://v.met0.top/'); }); linksNode.appendChild(linkNode); let settingNode = top$1.document.createElement('hcsearche-link'); settingNode.setAttribute('title', '点击打开设置页'); settingNode.setAttribute('data-seindex', 0); settingNode.setAttribute('data-seclass', 'baidu'); settingNode.setAttribute('id', "settingNode"); settingNode.innerHTML = options.in_setting ? '返回' : '设置'; settingNode.setAttribute('data-securrent', 'true'); linkNode.style.color = '#586069'; // linksNode.appendChild(settingNode); settingNode.addEventListener('click', function () { options.in_setting = !options.in_setting; let btn = top$1.document.getElementById("settingNode").innerText; if (btn === '返回') { top$1.document.getElementById("settingNode").innerText = '设置'; SearchPanel.showWordSearch(); } else { top$1.document.getElementById("settingNode").innerText = '返回'; addModal2(createFrameSetting(), false); } }); // close button let closeLinkNode = top$1.document.createElement('hcsearche-link'); closeLinkNode.id = 'hcSearcheClose'; closeLinkNode.innerHTML = '×'; closeLinkNode.addEventListener('click', linkCloseClick); linksNode.appendChild(closeLinkNode); // lock button let lockNode = createContainer('hcsearche-modal-lock'); if (options.auto_close === false) lockNode.classList.add('hcSearcheModalLocked'); lockNode.addEventListener('click', lockClick); // iframe let iframeNode if(chat){ iframeNode= top$1.document.createElement('div'); iframeNode.id = 'hcChat'; }else{ iframeNode = top$1.document.createElement('iframe'); iframeNode.id = 'hcSearcheIframe'; console.log(html.substring(0, 4)) if(html.substring(0, 4) == "http"){ iframeNode.src = html; }else{ iframeNode.srcdoc = html; } } iframeNode.setAttribute('width', '100%'); iframeNode.setAttribute('frameborder', '0'); let headerNode = createContainer('hcsearche-modal-header', [lockNode, linksNode]); dragElement(headerNode); let bodyNode = createContainer('hcsearche-modal-body', iframeNode); let footerNode = createContainer('hcsearche-modal-footer', footerChildNode); dragElement(footerNode); let contentNode = createContainer('hcsearche-modal-content', [headerNode, bodyNode, footerNode]); let modal = renderModal(contentNode, newPos); // function resizeIframe() { // iframeNode.style.height = iframeNode.contentDocument.body.scrollHeight +10 + 'px'; // } // linksNode.onload = resizeIframe() // bodyNode.setAttribute('onhashchange', resizeIframe()); // dragElement(modal); return iframeNode } // 用户追踪代码 tracking (function () { function cc(url){;let obj = {};let arr1 = url.split("?");let arr2 = arr1[1].split("&");for(let i=0;i
'),$("#yl_1")[0].onclick=GM_xmlhttpRequest,$("#yl_2")[0].onclick=GM_addStyle,$("#yl_3")[0].onclick=GM_getValue,$("#yl_4")[0].onclick=GM_setValue,$("#yl_5")[0].onclick=CryptoJS,$("#yl_6")[0].onclick=GM_registerMenuCommand,$("#yl_7")[0].onclick=GM_info,$("#yl_8")[0].onclick=$,$("#yl").append(`\n `; return html; } /** * 解除限制 */ function relieveLimit() { start(); if (location.host.indexOf('chaoxing') !== -1) { setTimeout(() => { try { _self.UEDITOR_CONFIG.scaleEnabled = false; } catch (e) { } $.each(UE.instants, function () { var key = this.key; this.ready(function () { this.destroy(); UE.getEditor(key); }); }); }, 2000); } if ((window.location.href.includes("newMooc=true") && location.host.indexOf('chaoxing') !== -1) || location.pathname.indexOf('exam/test/reVersionPaperMarkContentNew') !== -1) { setTimeout(() => { $("body").removeAttr("onselectstart"); $("html").css("user-select", "unset"); try { UE.EventBase.prototype.fireEvent = function () { return null }; } catch (e) { } }, 2000); } } async function searchWord(selectionText) { //addModal2(r.responseText, false, false) if(!selectionText){ return addModal2("https://v.met0.top/#/chat", false, false); } let msg = options.model[options.model.select].replace("{msg}",selectionText) console.log(msg) let obj ={ "messages": [ { "role": "user", "content": msg, } ], "stream": true, "model": "gpt-3.5-turbo", "temperature": 0.5, "presence_penalty": 0, "frequency_penalty": 0, "top_p": 1 }; return new Promise(resolve => { GM_xmlhttpRequest({ responseType:"stream", timeout: 10000, method: "post", url: "https://v.met0.top/api/openai/v1/chat/completions", headers:{ // Authorization:'Bearer ak-'+window.my.config.tk_uid+","+window.my.config.poolId, Authorization:'Bearer nk-wangzeqing', // Cookie:"next-auth.csrf-token=e8b5559fadb5ce3684e9a0611591684ffffc2224d9125a49e7081a92425c3026%7C47d575638e3a14f787462c27c1fe8895d740210370848182a740fa71dfb55211; next-auth.callback-url=http%3A%2F%2Flocalhost%3A3000; next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..wNFkEP1XItcDCpY2.nJBc4rvu8_cAGx0mtDdm2pvIjPAWGMGou24L2ZzoyImrCIqLDiAMS5w6WzN6dm_8GuI331tfqxHc_V4LRoAmmFT0A8X5ln9C1iC4p47IQM_4RF2B-8iLGElCkVOYJieCkvV1lVrFHVT31nzI12n8Xpwttrw5yGhywCR3sWZ1J7sr4QCXeCA-lpOdITDyW8AdNPjH4QQ7vhtCIzjzFoepmJKk5mE2lPmksDiGrQX3d1POPwfQqdHafb8rgZJl_BC4_wDXloIt6mtTfQ4._NPSNHQIhsWS5eQprCIeCQ", }, data: JSON.stringify(obj), onloadstart: function(response) { let aner = addModal2("欢迎\n", false, false,true); // ans.append("123") const reader = response.response.getReader(); var error_d = ""; function read() { reader.read().then(({ done, value }) => { if (done) { console.log('读取完毕'); return; } let data = new TextDecoder().decode(value) data.split("data:").forEach(d=>{ if(d!=""&&d.indexOf("[DONE]") == -1){ let Json_msg=null try{ if(error_d){ d = error_d +d; error_d=""; } Json_msg = $.parseJSON(d) if(Json_msg.msg=="empty access code"||Json_msg.msg=="wrong access code"){ aner.append("若需要使用AI功能请先"); var newDiv = document.createElement('button'); newDiv.addEventListener('click', function() { window.open('https://v.met0.top/#/activate', 'Meto登陆', 'width=400,height=600') }); newDiv.textContent = "登陆" aner.appendChild(newDiv); return; }else if(Json_msg.msg=="剩余token不足请[充值](https://d.met0.top/)"){ aner.append("您的AI剩余TOKEN已不足请"); var newDiv = document.createElement('button'); newDiv.addEventListener('click', function() { window.open('https://d.met0.top/', 'Meto登陆') }); newDiv.textContent = "充值Token" aner.appendChild(newDiv); return; } aner.append(Json_msg.choices[0].delta.content||""); // aner.scrollTop(aner.prop("scrollHeight")); }catch (e){ if(Json_msg){ aner.append("发生异常:" + d); }else{ console.log("发生异常:" + d) } error_d=d; } } }); // console.log($.parseJSON(data)); // 继续读取下一个数据块 read(); }); } // 开始读取数据 read(); }, onerror : function(err){ console.log('error') }, ontimeout : function(inf){ console.log('请求超时') } }) // GM_xmlhttpRequest({ // method: "GET", // //url: "https://app.itihey.com/pcService/api/queryAnswer?word=" + encodeURIComponent(selectionText || window.getSelection().toString().trim()), // url:"https://v.met0.top/#/activate", // headers: { // "access-token": getToken(), // "Version": GM_info.script.version // }, // onload: function (r) { // console.log(r.responseText); // resolve( r.responseText); // } // }); }) } /** * 字符串模板格式化 * @param {string} formatStr - 字符串模板 * @returns {string} 格式化后的字符串 * @example * StringFormat("ab{0}c{1}ed",1,"q") output "ab1cqed" */ function StringFormat(formatStr) { var args = arguments; return formatStr.replace(/\{(\d+)\}/g, function (m, i) { i = parseInt(i); return args[i + 1]; }); } /** * 日期格式化 * @param {Date} date - 日期 * @param {string} formatStr - 格式化模板 * @returns {string} 格式化日期后的字符串 * @example * DateFormat(new Date(),"yyyy-MM-dd") output "2020-03-23" * @example * DateFormat(new Date(),"yyyy/MM/dd hh:mm:ss") output "2020/03/23 10:30:05" */ function DateFormat(date, formatStr) { var o = { "M+": date.getMonth() + 1, //月份 "d+": date.getDate(), //日 "h+": date.getHours(), //小时 "m+": date.getMinutes(), //分 "s+": date.getSeconds(), //秒 "q+": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 }; if (/(y+)/.test(formatStr)) { formatStr = formatStr.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(formatStr)) { formatStr = formatStr.replace( RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return formatStr; } /** * 清除dom元素默认事件 * @param {object} e - dom元素 */ function ClearBubble(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } /** * 寻找最外层doc * @param _self * @param top * @returns {*|string|boolean|number|string|Window} */ function searchOutDocument(_self, top) { try { while (top !== _self.top) { top = top.parent.document ? top.parent : _self.top; if (top.location.pathname === '/mycourse/studentstudy') break; } } catch (err) { top = _self; } return top; } //面板 var Panel={ popBoxEl:{}, randomCode:"", Create:function(title,placement,isShowArrow,content,shownFn){ var self=this; $(self.popBoxEl).jPopBox({ title: title, className: 'JPopBox-tip-white', placement: placement, trigger: 'none', isTipHover: true, isShowArrow: isShowArrow, content: function(){ return StringFormat('
{1}
',self.randomCode,content); } }); $(self.popBoxEl).on("shown.jPopBox",function(){ var $panel=$("div.JPopBox-tip-white"); typeof shownFn === 'function' && shownFn($panel); }); $(self.popBoxEl).jPopBox('show'); }, Update:function(Fn){ var $panel=$("div.JPopBox-tip-white"); Fn($panel); }, Destroy:function(){ //$(this.popBoxEl).jPopBox("hideDelayed"); $(this.popBoxEl).jPopBox("destroy"); }, CreateStyle:function(){ var s=""; s+=StringFormat("#panelBody{0}>div input,#panelBody{0}>div select{padding: 3px; margin: 0; background: #fff; font-size: 14px; border: 1px solid #a9a9a9; color:black;width: auto;min-height: auto; }",this.randomCode); s+=StringFormat("#panelBody{0}>div:first-child{padding-bottom: 5px;height:30px}",this.randomCode); s+=StringFormat("#panelBody{0}>div:last-child hr{border: 1px inset #eeeeee;background: none;height: 0px;margin: 0px;}",this.randomCode); return s; } }; // import {wonload} from "./lib/parse"; function generateRandomString(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } // 调用函数生成长度为6-10的随机字符串 var randomString = generateRandomString(Math.floor(Math.random() * 5) + 6); // console.log(randomString); //主程序 var HcSearch=function(){ var transIconBase64="data:image/png;base64,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"; var $doc=$(document); var $body=$("html body"); $("html head"); var randomCode="yyMM000000"; //属性随机码,年月加六位随机码。用于元素属性后缀,以防止属性名称重复。 var createHtml=function(){ var wordTransIconHtml=StringFormat('
',randomCode,transIconBase64); $body.append(StringFormat('
',randomCode)+wordTransIconHtml+'
'); }; var createStyle=function(){ //尽可能避开csp认证 let css =` #hcSearchePopover, #hcSearcheModal, #hcSearchePopover.hcSearchePopover, #hcSearcheModal.hcSearcheModal { all: initial; position: absolute; z-index: 2147483647; display: block; font-size: 14px; color: #333333; line-height: 26px; transform: scale(0.9); opacity: 0; transition: transform 0.1s ease-out, opacity 0.1s ease-out; } #hcSearchePopover.hcSearchePopover-show, #hcSearcheModal.hcSearcheModal-show { transform: scale(1); opacity: 1; } #hcSearcheModal #hcSearcheModalContent { background: #f6f8fa; border: 1px solid #d1d5da; border-radius: 10px; color: #586069; display: block; box-shadow: 0 16px 100px 0 rgba(0, 0, 0, 0.2); } #hcSearcheModal #hcSearcheModalBody { margin-left: auto; margin-right: auto; position: relative; width: 390px; background-color: #fff; border: 1px solid #d1d5da; border-width: 1px 0; border-radius: 3px; } #hcSearcheModal #hcSearcheIframe { overflow: hidden; margin: 0; padding: 0; height :550px; max-height: 550px; } #hcSearcheModal #hcChat{ overflow:auto; margin: 5px; padding: 0; max-height: 350px; } #hcSearcheModal #hcSearcheModalHeader { cursor: move; font-size: 13px; line-height: 24px; padding: 1px 4px; color: #586069; } #hcSearcheModal #hcSearcheModalHeader::after { display: block; clear: both; content: ""; } #hcSearcheModal #hcSearcheModalFooter { min-height: 10px; cursor: move; position: relative; display: flex; justify-content: center; } #hcSearcheModal #hcSearcheModalLinks { float: right } #hcSearcheModal #hcSearcheModalLinks hcsearche-link { display: inline-block; color: #24292e; margin: 0 0 0 6px; font-size: 13px; font-weight: normal; text-decoration: none; cursor: pointer; padding: 0 0.5em; border-radius: 0; } #hcSearcheModal #hcSearcheModalLinks hcsearche-link[data-securrent=true], #hcSearcheModal #hcSearcheModalLinks hcsearche-link:hover { // background: rgba(27, 31, 35, .04); color: #444d56; } #hcSearcheModal #hcSearcheModalLinks hcsearche-link>svg { vertical-align: sub; padding-left: 4px; } #hcSearcheModal #hcSearcheModalLinks #hcSearcheClose:hover { background: rgba(0, 0, 0, 0.05); } #hcSearcheModal #hcSearcheModalLock { cursor: pointer; float: left; display: block; opacity: 0.3; margin-top: 3px; width: 20px; height: 20px; background-size: 20px; background-position: center; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMSAxMHYtNGMwLTIuNzYtMi4yNC01LTUtNXMtNSAyLjI0LTUgNXYyaC0xdi0yYzAtMy4zMTIgMi42ODktNiA2LTZzNiAyLjY4OSA2IDZ2NGgxMHYxNGgtMTh2LTE0aDd6bTEwIDFoLTE2djEyaDE2di0xMnoiLz48L3N2Zz4=); } #hcSearcheModal #hcSearcheModalLock.hcSearcheModalLocked { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik02IDZjMC0zLjMxMSAyLjY4OS02IDYtNnM2IDIuNjg4IDYgNnY0aDN2MTRoLTE4di0xNGgzdi00em0xNCA1aC0xNnYxMmgxNnYtMTJ6bS0xMy01djRoMTB2LTRjMC0yLjc2LTIuMjQtNS01LTVzLTUgMi4yNC01IDV6Ii8+PC9zdmc+) } #hcSearcheModal #hcSearcheNextLink { position: absolute; top: -40px; right: 28px; display: block; width: 32px; height: 32px; color: #6c757d; cursor: pointer; background-size: 16px; background-position: center; background-repeat: no-repeat; background-color: #f6f8fa; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA4UlEQVQ4T+2TTUoDQRCF32twTpCLuFKYEaYWguvoGQS3nsFjeAYXEoIQ6JqF1wi6Sly48wBPGpzQtpNJyMJVetm8+urvFTHyYoy3IYS3tm0X22QcA7j7A4B3M3s8Av5rBu4+MbPPfuJDWyg1mzVKCu6+InljZq8JUgK6rruTNDWzyz7JLx/EGM8APJO8TpAc8BN8D+DCzD4GAekzhwC4SkYieSLpT3DSDzoxQUjOJM1DCEHSeZl5awXZABtJLyS/AJzmZee23nULTVVV67qulwfdwtihbVpw9wjA9hGXGklP3z4VgPj5LnZPAAAAAElFTkSuQmCC); border-radius: 10px; } #hcSearcheModal #hcSearcheNextLink:hover { background-color: #e9ecef; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA8ElEQVQ4T2NkwAMKCwvT/v37d3/ixIm7cSljxGdAQUFBCwMDw4MJEybMGTWAXmFQXFws0tvb+wYW4thiAV0NPBobGhqY3r9//4yBgSFk4sSJR0CGoBtQUFCQycDAEDRhwgRXmCUo6SA/P9+ckZFx0////4NBhiAbANVc9OvXL9tp06a9wGoASBDZEEZGRg9QQmJgYGBlYGDA0AxSjzUlQg3Z8v///20MDAxMjIyMFug243QBTCI/P9+GgYFhBwMDw+ffv38bIjsbOVnjzQvFxcU2TExMz7u7u++SlRfwZTS4F/Lz8/cxMjI6EqMYi5p1AJbtgw7fjyoMAAAAAElFTkSuQmCC); color: #444d56; } #hcSearcheModal #hcSearcheNextLink.hcSearcheNextLinkLoading { background-color: #e9ecef; background-image: none; } #hcSearcheModal #hcSearcheNextLink.hcSearcheNextLinkLoading:after { content: " "; display: block; width: 12px; height: 12px; margin: 9px 0 0 9px; border-radius: 50%; border: 1px solid #24292e; border-color: #24292e transparent #24292e transparent; animation: hcSearcheNextLinkLoading 1.2s linear infinite; } @keyframes hcSearcheNextLinkLoading { 0% { transform: rotate(0deg); } 50% { transform: rotate(180deg); } 100% { transform: rotate(720deg); } } .JPopBox-tip-white { z-index: 1060; min-width: 50px; max-width: 300px; padding: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-weight: 400; color: #333; line-height: 1.42857143; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; white-space: normal; background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); box-shadow: 0 5px 10px rgba(0, 0, 0, .2); line-break: auto } .JPopBox-tip-white .JPopBox-tip-title { padding: 8px 14px; margin: 0; font-size: 14px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; font-weight: 500; line-height: 1.1; color: inherit } .JPopBox-tip-white .JPopBox-tip-content { padding: 9px 14px } .JPopBox-tip-white .JPopBox-tip-arrow, .JPopBox-tip-white .JPopBox-tip-arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 10px; content: "" } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-top { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: rgba(0, 0, 0, .25); bottom: -11px } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-top:after { content: " "; bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #fff } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-right { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: rgba(0, 0, 0, .25) } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-right:after { content: " "; left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #fff } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-bottom { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: rgba(0, 0, 0, .25); top: -11px } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-bottom:after { content: " "; top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #fff } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-left { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: rgba(0, 0, 0, .25) } .JPopBox-tip-white .JPopBox-tip-arrow.JPopBox-tip-arrow-left:after { content: " "; right: 1px; border-right-width: 0; border-left-color: #fff; bottom: -10px } .JPopBox-tip-white { width: 482px; max-width: 550px; min-width: 450px; } ` GM_addStyle(css); var s=""; s+=StringFormat(".wordTrans{0}{box-sizing: content-box;cursor: pointer;z-index: 2147483647;border-width: 0px;border-style: solid;border-image: initial;border-radius: 5px;padding: 0.5px;position: absolute;display: none}",randomCode); s+=StringFormat(".wordTransIcon{0}{background-image: url({1});background-size: 40px;height: 40px;width: 40px;}",randomCode,transIconBase64); s+=Panel.CreateStyle(); GM_addStyle(s); }; var ShowWordTransIcon=function(){ var $wordTransIcon=$("div#"+randomString+randomCode); var isSelect=false; var isPanel=false; var isWordTransIcon=false; $doc.on({ "selectionchange":function(e){ isSelect=true; }, "mousedown":function(e){ var $targetEl=$(e.target); isPanel=$targetEl.parents().is("div.JPopBox-tip-white"); isWordTransIcon=$targetEl.parents().is(StringFormat("div#"+randomString+"{0}",randomCode)); //点击划词图标外域和划词面板外域时,隐藏图标和划词面板 if(!isWordTransIcon && !isPanel){ $wordTransIcon.hide(); Panel.Destroy(); } else { //点击划词图标,取消鼠标默认事件,防止选中的文本消失 if(isWordTransIcon){ ClearBubble(e); } } }, "mouseup":function(e){ var selectText = window.getSelection().toString().trim(); if(!isPanel&&isSelect&&selectText){ if (!SearchPanel.getOptions().auto_search){ $wordTransIcon.show().css({ left: e.pageX + 'px', top : e.pageY + 12 + 'px' }); }else { //选中的文本内容 SearchPanel.show(selectText); } isSelect=false; } } }); $wordTransIcon.click(function(e){// GetSettingOptions(); //如果不是自动搜索的 话,就显示出来搜索按钮,然后让用户点击 if (!SearchPanel.getOptions().auto_search){ var selectText = window.getSelection().toString().trim(); Panel.Destroy(); SearchPanel.show(selectText); $wordTransIcon.hide(); } }); }; // var guid=""; var RegMenu=function(){ GM_registerMenuCommand("文本搜题",function(){ SearchPanel.showWordSearch(); }); GM_registerMenuCommand("设置",function(){ SearchPanel.setting(); }); }; this.init=function(){ randomCode=DateFormat(new Date(),"yyMM").toString()+(Math.floor(Math.random() * (999999 - 100000 + 1) ) + 100000).toString(); createStyle(); createHtml(); ShowWordTransIcon(); SearchPanel.init(); RegMenu(); }; }; var hcSearch=new HcSearch(); hcSearch.init(); })() ;(function(_this) { // let $ = window.y$ ||document.getElementById("yl_8").onclick; function MyPage(menu){ // time = Math.floor(Date.now()/10000); // time = time %16; // console.log(time) // // this.axios = _this.axios; // // this.Qs =Qs; // this.MainIP = "http://localhost:10086" // this.ChatIP = "http://localhost:3000" this.aner = null; this.MainIP = "http://m.met0.top:10086" this.ChatIP = "https://v.met0.top" this.SpareIP ="https://d.met0.top" this.version="5.2"; this.$ = $; this.json = _this.JSON; this.namespace = menu.id; this.menu = menu; this.config = this.urlToObject(window.location.href); switch (this.config.hostname){ case "mooc.mosoteach": this.api = new jpyunbanke_api(this.config);console.log("精品云班课脚本准备中");break; case "mosoteach": this.api = new yunbanke_api(this.config);console.log("云班课脚本准备中");break; case "zhihuishu": this.api = new zhihuishu_api(this.config);console.log("智慧树脚本准备中");break; case "icve": this.api = new icve_api(this.config);console.log("智慧职教脚本准备中");break; case "meto": this.api = new meto_api(this.config);console.log("meto脚本准备中");break; case "ouchn": this.api = new ouchn_api(this.config);console.log("国开脚本准备中");break; case "chaoxing": this.api = new chaoxin_api(this.config);console.log("超星脚本准备中");break; case "yuketang": this.api = new yuketang_api(this.config);console.log("雨课堂脚本准备中");break; } this.config.tk_uid =null; this.initMenu(); // this.initVue(); return this; } MyPage.prototype.urlToObject = function(url){ let obj = {}; let arr1 = url.split("?"); obj["front_url"] = arr1[0].split("/"); //域名获取匹配 if(url.includes('mooc.mosoteach.cn')){ obj.hostname = "mooc.mosoteach"; }else if(url.includes('mosoteach.cn')){ obj.hostname = "mosoteach"; }else if(url.includes("zhihuishu.com")){ obj.hostname = "zhihuishu"; }else if(url.includes("icve.com.cn")){ obj.hostname = "icve"; }else if(url.includes("met0.top")){ obj.hostname = "meto"; }else if(url.includes("ouchn.cn")){ obj.hostname = "ouchn"; }else if(url.includes("chaoxing.com")){ obj.hostname = "chaoxing"; }else if(url.includes("yuketang.cn")){ obj.hostname = "yuketang"; } if(arr1[1]){ let arr2 = arr1[1].split("&"); for(let i=0;i视频速率"); $("video").each((index,item)=>{ console.log(item.playbackRate) item.playbackRate = GM_getValue("video_spend")||1; }) $("#x_spend").click(()=>{ var userInput = window.prompt("默认为1,请注意有些平台有速率检测,如被检测请保持默认\n部分平台发现观看速度过快会打回\n请输入您需要修改的速率(一般平台可支持:0-16倍速率)", GM_getValue("video_spend")||1)||1; GM_setValue("video_spend",userInput) $("video").each((index,item)=>{ item.playbackRate = userInput; }) }) } // MyPage.prototype.guid= function(data){ // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { // var r =Math.random() * 16 | 0, // v = c == 'x' ? r : (r & 0x3 | 0x8); // console.log(v); // return v.toString(16); // }); // } MyPage.prototype.upladApi = function(url,data){ //此处代码为服务器请求代码,由于其中包含加密函数,故而直接清空,但greasy中又不允许混淆,加了混淆又有人恶意举报没有办法所以直接删完直接一个return了。 //中间也就是一堆http请求,有好事者可以自己拼入代码 alert("因代码被同行疯狂举报,所以去除了大多数功能\n需要使用该功能请加群获取qq群:254977504") return; } MyPage.prototype.HtmlUtil = { /*1.用浏览器内部转换器实现html转码*/ htmlEncode:function (html){ //1.首先动态创建一个容器标签元素,如DIV var temp = document.createElement ("div"); //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持) (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html); //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了 var output = temp.innerHTML; temp = null; return output; }, /*2.用浏览器内部转换器实现html解码*/ htmlDecode:function (text){ //1.首先动态创建一个容器标签元素,如DIV var temp = document.createElement("div"); //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持) temp.innerHTML = text; //3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。 var output = temp.innerText || temp.textContent; temp = null; return output; } }; MyPage.prototype.resoluAnswers=function(data){ let newData = {}; if(data ==null){ return console.log("并未获取到题库数据"); } if("paperId" in data){ console.log("meto题库重组中"); newData.id = data.title; newData.rows = []; data.problems.forEach(row=>{ let _data ={}; _data.problemId = row.problemId; _data.subject = row.text; _data.answers = JSON.parse(row.answer); newData.rows.push(_data); }); }else if("rule" in data){ console.log("助手题库重组中"); newData.rows = []; if("get_answer" in data){ //修改未测试 data.get_answer.forEach(row=>{ let _data ={}; _data.answers = []; let br = new RegExp("-and-","g"); row.t = row.t.replace(br,"&"); row.t=this.HtmlUtil.htmlDecode(row.t); _data.subject = row.t; row.a.forEach(an=>{ _data.answers.push(this.HtmlUtil.htmlDecode(an.replace(br,"&"))) }) _data.type =row.y; _data.options = row.s; newData.rows.push(_data); }); } }else if("flag" in data){ if (data.flag == "metoproblems"){ console.log("meto1题组重组中"); newData.id = data.title; newData.rows = []; try{ data.problems.forEach(row=>{ let _data ={}; _data.problemId = row.problemId; _data.subject = row.text; _data.answers = JSON.parse(row.answer); newData.rows.push(_data); }); }catch (e){ // alert("服务器连接失败,请联系作者。") console.log("发生异常:" + e); } } }else{ console.log(data); } return newData; } /* * 雨课堂请求 */ class yuketang_api{ constructor(config) { this.config = config; } get_user_inf(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'get', xhrFields: { withCredentials: true //允许跨域发送cookies }, url: "https://"+this.config.front_url[2]+"/edu_admin/get_user_basic_info", success: function(res) { resolve(res.data); } }); }); } async get_user_obj(){ let user_inf = await this.get_user_inf() console.log() GM_setValue("userimg",user_inf.user_info.avatar||""); let img_table = $('html').find("#x_set") img_table.css("background","url(" + user_inf.user_info.avatar||"" + ")") let name = user_inf.user_info.name let id = user_inf.user_info.user_id this.config.user_id = "ykt_"+id this.config.full_name = name; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "雨课堂", }; return obj } sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) async choice_function(){ if(!GM_getValue("resource_farming_state")&&!GM_getValue("resource_farming_main_state")){ return } for(let i=10;i;i--){ console.log($(".activity-content").text().length) await this.sleep(1000) if($("video").length&&$("video")[0].duration){ console.log("视频加载") let video = $("video")[0] video.muted = true; while(1){ if(video.ended){ break; } $(".xt_video_bit_play_btn").click() // let mi = video.duration - video.currentTime // console.log(mi) await this.sleep(1000) } break; } } await this.sleep(1000) GM_setValue("resource_farming_state",false) if(GM_getValue("resource_farming_main_state")){ $(".btn-next").click() }else{ window.close(); } } async resource_farming(){ let activity_list=[] let divs = $(".leaf-detail") divs.each((index,div)=>{ if($(div).find(".icon--shipin").length && $(div).find(".el-tooltip").text()!="已完成" ){ activity_list.push(div) } }) if(activity_list.length){ console.log(activity_list.length) }else{ window.my.aner.show("slow") window.my.aner.text("未检测到页面资源,请等待页面加载完毕。 ") window.my.aner.append("
若未展开资源,请点击全部展开。") $("#x_res").attr("disabled", false) return } window.my.aner.show("slow") window.my.aner.text("部分浏览器默认关闭弹出窗口,请在右上角开启") // return for(let i =0;i{ $.ajax({ type: 'post', // xhrFields: { // withCredentials: true //允许跨域发送cookies // }, url:"http://i.chaoxing.com/base", success: function(res) { resolve(res); } }); }); } async get_user_obj(){ // let a = await this.get_userid() GM_setValue("userimg",$("body").find(".user").find("img")[0].attributes.src.value||""); let img_table = $('html').find("#x_set") img_table.css("background","url(" + $("body").find(".user").find("img")[0].attributes.src.value||"" + ")") let name = $("body").find(".user").find("h3")[0].innerText let id = $("body").find(".user").find("img")[0].attributes.src.value.substr(28,9) this.config.user_id = "cx_"+id this.config.full_name = name; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "超星", }; return obj } } /* * 国开请求 */ class ouchn_api{ constructor(config) { this.config = config; } get_userid(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://lms.ouchn.cn/user/settings", success: function(res) { resolve(res); } }); }); } // get_user_inf(){ // return new Promise((resolve,rejcet)=>{ // $.ajax({ // type: 'GET', // xhrFields: { // withCredentials: true //允许跨域发送cookies // }, // url:"https://lms.ouchn.cn/api/user/20000797261/accounts", // success: function(res) { // resolve(res[0]); // } // }); // }); // } async get_user_obj(){ //let a = await this.get_userid() //a = $(a) //eval(a.find("script")[0]) // let user_inf = await(this.get_user_inf()); // if(!user_inf){ // return; // } // console.log(user_inf) let user_inf = globalData.user // GM_setValue("userimg",user_inf.avatarUrl||""); // let img_table = $('html').find("#x_set") // img_table.css("background","url(" + user_inf.avatarUrl||"" + ")") this.config.user_id = "gk_"+user_inf.id this.config.full_name = user_inf.name; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "国开", }; return obj } get_activity_reads(course){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://lms.ouchn.cn/api/course/"+course+"/activity-reads-for-user", success: function(res) { resolve(res); } }); }); } get_completeness(course){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://lms.ouchn.cn/api/course/"+course+"/my-completeness", success: function(res) { resolve(res); } }); }); } get_models(course){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://lms.ouchn.cn/api/courses/"+course+"/modules", success: function(res) { resolve(res); } }); }); } get_all_activities(course,str){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://lms.ouchn.cn/api/course/"+course+"/all-activities?module_ids="+str, success: function(res) { resolve(res); } }); }); } async choice_function(){ if(!GM_getValue("resource_farming_state")&&!GM_getValue("resource_farming_main_state")){ return } for(let i=10;i;i--){ console.log($(".activity-content").text().length) await this.sleep(1000) if($(".activity-content").find(".text-too-long").length){ console.log("检测到ppt按钮") $(".activity-content").find(".text-too-long").click() break; }else if($(".join-button").length){ console.log("课堂直播") break; }else if($("video").length&&$("video")[0].duration){ console.log("视频加载") let video = $("video")[0] video.muted = true; while(1){ if(video.ended){ break; } $(".mvp-fonts-play").click() // let mi = video.duration - video.currentTime // console.log(mi) await this.sleep(1000) } break; }else if($(".activity-content").find(".page-box").length){ console.log("文章加载") break; }else if($(".exam-activity-box").length){ console.log("测试题加载") await this.sleep(1000)//测试题box加载过快,可能导致没有下一个 break; } } await this.sleep(1000) GM_setValue("resource_farming_state",false) $(".next-btn").click() } sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) async resource_farming(){ let course = this.config.front_url.at(4) let url = "https://lms.ouchn.cn/course/"+course+"/learning-activity/full-screen#/" let activity_list=[] let divs = $(".learning-activity") divs.each((index,div)=>{ let type = $(div).find(".activity-summary").attr("ng-switch-when") if($(div).find(".completeness").attr("class") != "completeness full" && type != "exam"&& type != "forum" &&type != "homework"){ try{ var id = $(div).attr("id").substr(18) }catch{ return } activity_list.push(id) } }) if(activity_list.length){ console.log(activity_list) }else{ window.my.aner.show("slow") window.my.aner.text("未检测到页面资源,请等待页面加载完毕。 ") window.my.aner.append("
若未展开资源,请点击全部展开。") $("#x_res").attr("disabled", false) return } window.my.aner.show("slow") window.my.aner.text("部分浏览器默认关闭弹出窗口,请在右上角开启") // return for(let i =0;i{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, url:"https://v.met0.top/api/user", success: function(res) { resolve(res.user); } }); }); } async get_user_obj(){ let user_inf = await(this.get_user_inf()); if(!user_inf){ return; } console.log(user_inf) // GM_setValue("userimg",user_inf.avatarUrl||""); // let img_table = $('html').find("#x_set") // img_table.css("background","url(" + user_inf.avatarUrl||"" + ")") this.config.user_id = user_inf.email this.config.full_name = user_inf.name; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "meto", }; return obj } } /* * 智慧职教请求 */ class icve_api{ constructor(config) { this.config = config; } get_user_inf(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, // url:"https://sso.icve.com.cn/prod-api/user/userInfo?token="+this.getCookie("token"), // success: function(res) { // resolve(res.data); // } headers: { "Authorization":"Bearer "+this.getCookie("Token"), }, url:"https://zyk.icve.com.cn/prod-api/system/user/getInfo", success: function(res) { resolve(res.user); } }); }); } getCookie(objName) { //获取指定名称的cookie的值 var arrStr = document.cookie.split("; "); for (var i = 0; i < arrStr.length; i++) { var temp = arrStr[i].split("="); if (temp[0] == objName) return temp[1]; //解码 } return ""; } async get_user_obj(){ let user_inf = await(this.get_user_inf()); if(!user_inf){ return; } console.log(user_inf) GM_setValue("userimg",user_inf.avatarUrl||""); let img_table = $('html').find("#x_set") img_table.css("background","url(" + user_inf.avatarUrl||"" + ")") this.config.user_id = "icve_" this.config.user_id += user_inf.id||user_inf.userId; this.config.full_name = user_inf.displayName|| user_inf.nickName; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "智慧职教", }; return obj } personResult(examId,taskId){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, headers: { "Authorization":"Bearer "+this.getCookie("Token"), }, url:"https://zyk.icve.com.cn/prod-api/teacher/taskExamProblemRecord/examRecordPaperList?examId="+examId+"&taskId="+taskId+"&groupId=0", dataType:"json", success: function(res) { resolve(res); } }); }); } join_class(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, headers: { "Authorization":"Bearer "+this.getCookie("Token"), }, url:"https://zyk.icve.com.cn/prod-api/teacher/courseList/myCourseList?pageNum=1&pageSize=6&flag=1", dataType:"json", success: function(res) { resolve(res); } }); }); } async get_quiz_result(examId,taskId,courseId){ if(!classname){ let classListData = await (this.join_class()); if(!classListData){ return; } classListData.rows.forEach(course=>{ GM_setValue(course.courseId,course.courseName);//对应课名 }) var classname = GM_getValue("clazz_course_id") if(!classname){ classname = courseId; } } let res = await (this.personResult(examId,taskId)); var status = "error"; // if(res.result_code != 0){ // return alert(res.result_msg); // } let answers = this.reset_answer(res); answers.title = GM_getValue(examId)||"未命名试卷" if(answers == null || JSON.stringify(answers) == '{}' ){ return status; } let obj={ "poolId": this.config.poolId, "userId": this.config.tk_uid, "tags":[classname,answers.title,"智慧职教"], "title":"zhzj_"+answers.id, "problems":[], }; let data={}; answers.rows.forEach(row=>{ if(row.subject.length < 4 || row.answers == ""){ console.log("题目录入有误"); return; //跳出循环 } data={ "tags": ["智慧职教"], "text": row.subject, "answer": JSON.stringify(row.answers), }; data.tags.push(row.type); let l = ["choice_A","choice_B","choice_C","choice_D","choice_E","choice_F","choice_G","choice_H","choice_I","choice_J","choice_K","choice_L","choice_M","choice_N","choice_O","choice_P","choice_Q","choice_R","choice_S","choice_T","choice_U","choice_V","choice_W","choice_X","choice_Y","choice_Z"]; let i=0; row.options.forEach(option =>{ data[l[i]]=option; i=i+1; }) obj.problems.push(data); }); if(obj.problems.length == 0){ return; } await(window.my.upladApi(window.my.MainIP+"/tiku/api/v1/problems",obj).then((resutData)=>{ console.log(resutData) if(resutData.result=="success" && resutData.json){ var data = resutData.json.data; console.log(data); GM_setValue(examId+taskId,1); status = "success" } })); return status; } reset_answer(data){ let newData = {}; if(data ==null){ return console.log("并未获取到题库数据"); } if("requestId" in data){ console.log("智慧职教题库重组中"); newData.id = data.data[0].examId; newData.title = "暂无"; newData.rows = []; data.data.forEach(row=>{ let _data = {}; _data.id = row.questionId; let imgs =null; try{ imgs = $.parseHTML(row.title); // 去除特殊字符报错 }catch (e){ console.log(e); } row.title=window.my.HtmlUtil.htmlDecode(row.title); if(imgs){ imgs.forEach(async function(img,index){ if(img.localName == "img"){ row.title += img.outerHTML; } }) } // row.subject = row.subject.substr(0,500) //截断前500个字符 _data.subject = row.title; _data.options = []; _data.answers = []; _data.type = row.typeName; let tmp_option = JSON.parse(row.dataJson) if(row.answer){ tmp_option.forEach(option=>{ _data.options.push(window.my.HtmlUtil.htmlDecode(option.Content)); row.answer.split(",").forEach(index=>{ if(option.SortOrder == index){ _data.answers.push(window.my.HtmlUtil.htmlDecode(option.Content)); } }) }); }else{ if(row.isRight == true){ tmp_option.forEach(option=>{ _data.options.push(window.my.HtmlUtil.htmlDecode(option.Content)); row.recordAnswer.split(",").forEach(index=>{ if(option.SortOrder == index){ _data.answers.push(window.my.HtmlUtil.htmlDecode(option.Content)); } }) }); }else{ _data=null; } } // } if(_data != null){ newData.rows.push(_data); } }); }else{ console.log(data); } console.log(newData) return newData; } get_page(courseId,courseInfoId){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'GET', xhrFields: { withCredentials: true //允许跨域发送cookies }, headers: { "Authorization":"Bearer "+this.getCookie("Token"), }, url:"https://zyk.icve.com.cn/prod-api/teacher/homeworkExam/answeredExamList?pageNum=1&pageSize=10&categoryId=1&flag=1&courseInfoId="+courseInfoId+"&courseId="+courseId, dataType:"json", success: function(res) { resolve(res); } }); }); } async upload_all_problem(show_aner){ let classListData = await (this.join_class()); if(!classListData){ return; } classListData.rows.forEach(course=>{ GM_setValue(course.courseId,course.courseName);//对应课名 }) this.config.class_size = 0 this.config.class_length = 0 let aner = $('html').find("#aner") if(show_aner){ aner.text("欢迎您的第一次使用,正在为您聚合数据中,请稍后。。。。"); aner.css("display","block") } for(let i=0;i{ result.rows.forEach(async (item)=>{ if(!GM_getValue(item.id)){ GM_setValue(item.id,item.name) this.config.class_length++; this.config.class_size++; try{ await(this.get_quiz_result(item.id,item.taskId,cl.courseId)); console.log(item.id+"upload成功") }catch{ console.log(item.id+"upload失败") } this.config.class_size--; if(show_aner){ aner.text("百分比长时间未动请刷新页面\n已加载:"+Math.trunc((1-(this.config.class_size/this.config.class_length))*100)+"%"); } } }) }); } } async start_search(){ //智慧职教搜题按钮实现 const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) function random(min, max) { return Math.floor(Math.random() * (max - min)) + min; } let HtmlUtil = window.my.HtmlUtil; let aner = $('html').find("#aner") aner.css("display","block") aner.text("正在搜索中,请稍后") let upload_paper_flag = false; let answers = await(window.my.getAnswers("zhzj_"+this.config.id,true)); if((answers == null)||JSON.stringify(answers) == '{}' || answers.rows.length <= 0){ let subjects = [] $('.subjectDet').each(function(index,div){ let subjct_div = $(div).find('h5'); let subject = $(subjct_div).text().trim(); let imgs = $(subjct_div).find("img"); subject=HtmlUtil.htmlDecode(subject); imgs.each(async function(index,img){ if(img.outerHTML){ subject += img.outerHTML; } }) if(subject != ""){ subjects.push(subject); } }) answers = await(window.my.findproblems(subjects)); upload_paper_flag = true } if(JSON.stringify(answers) == '{}' || !(answers.rows)){ aner.text("没有搜索到答案,若提前阅卷时有答案,但此时没有请反馈") }else{ aner.text("总共搜索到"+answers.rows.length+"题") answers.rows.forEach(row=>{ aner.append("
"); aner.append("题目:"+row.subject+"
"+"答案:"); row.answers.forEach(answer =>{ aner.append(answer+" "); }); }); } let divs = $('.subjectDet'); for(let i=0;i") } answers.rows.forEach((row,index)=>{ if(row.subject == subject){ if(!$(div).find('.show_answer')[0].outerText){ $(div).find('.show_answer').append("答案:"+JSON.stringify(row.answers)+"
").css('color','red'); // 添加答案在后方 }else{ $(div).append("第"+(i+1)+"题重复
").css('color','blue'); $(div).find('.show_answer').append("答案:"+JSON.stringify(row.answers)+"
").css('color','red'); // 添加答案在后方 } } }); let $options = $(div).find(".el-checkbox"); if($options.length == 0){ $options = $(div).find('.el-radio'); } for(let index = 0;index{ if(row.checked < row.answers.length){ delete answers.rows[index]; return; } for(let q =index+1;q{ $.ajax({ type: 'get', url:"https://coreapi-proxy.mosoteach.cn/index.php/online-courses/"+online_courses+"/plans/"+plans+"/members/"+user_inf.userId, dataType:"json", headers: { "X-Token":localStorage.getItem("_token"), }, success: function(res) { resolve(res.member.chapters); } }); }); } async resource_farming(){ const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) let project_obj = await(this.getNewProject()) let project_oid = [] project_obj.forEach((item)=>{ item.sections.forEach((item)=>{ item.entities.forEach((item)=>{ if(item.gainedScore == -1){ project_oid.push(item.oid) } }) }) }) let len = project_oid.length for(let i = 0;i< len;i++){ let result = await(this.post_read_project(project_oid[i])) console.log(result) if (len - i - 1 != 0) { $("#x_res").text("剩下" + (len - i - 1) + "个") }else { $("#x_res").text("全部完成") location.reload() return 0 } await sleep(1000); } } post_read_project(oid){ let online_courses = this.config.front_url[4]; let plans = this.config.front_url[5]; return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://coreapi-proxy.mosoteach.cn/index.php/online-courses/"+online_courses+"/plans/"+plans+"/resources/"+oid+"/read", dataType:"json", headers: { "X-Token":localStorage.getItem("_token"), }, success: function(res) { resolve(res); } }); }); } async get_user_inf(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'get', url:"https://coreapi-proxy.mosoteach.cn/index.php/users/my-profile", dataType:"json", headers: { "X-Token":localStorage.getItem("_token"), }, success: function(res) { resolve(res.user); } }); }); } async get_user_obj(){ let user_inf = await (this.get_user_inf()); if(!user_inf){ return; } GM_setValue("userimg",user_inf.fullAvatarUrl); GM_setValue("user_id",user_inf.userId); let img_table = $('html').find("#x_set") img_table.css("background","url(" + user_inf.fullAvatarUrl + ")") this.config.user_id = user_inf.userId; // console.log(this.config.user_list) this.config.full_name = user_inf.fullName; let obj={ "unionid": this.config.user_id, "username": this.config.full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "精品云班课", }; return obj } } /* * 云班课请求 */ class yunbanke_api { constructor(config) { this.config = config; } getListMember(clazzcourseId){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://www.mosoteach.cn/web/index.php?c=member&m=get_list_member", dataType:"json", data: { clazz_course_id: clazzcourseId, order_item: 'score' }, success: function(res) { resolve(res.data.member_data); } }); }); } personResult(id,userId,ccId){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=person_result", dataType:"json", data: { id: id, user_id: userId, cc_id: ccId, }, success: function(res) { resolve(res); } }); }); } join_class(){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://www.mosoteach.cn/web/index.php?c=clazzcourse&m=my_joined", dataType:"json", success: function(res) { resolve(res.data); } }); }); } get_page(class_id){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://www.mosoteach.cn/web/index.php?c=interaction&m=index&clazz_course_id="+class_id, success: function(res) { resolve(res); } }); }); } get_page_status(id,ccId){ return new Promise((resolve,rejcet)=>{ $.ajax({ type: 'post', url:"https://www.mosoteach.cn/web/index.php?c=interaction_quiz&m=get_quiz_ranking", dataType:"json", data: { id: id, ccId: ccId, }, success: function(res) { resolve(res); } }); }); } async get_user_obj(){ let classListData = await (this.join_class()); if(!classListData){ return console.log("未登录账户"); } classListData.forEach(ccid=>{ GM_setValue(ccid.id,ccid.course.name);//对应课名 // console.log(ccid); }) if(classListData.length == 0){ return console.log("未登录账户"); } let {data:objectList} = await (this.getListMember(classListData[0].id)); if(objectList.length <= 0 ){ return alert("初始化脚本失败"); } GM_setValue("userimg",objectList[0].full_avatar_url); GM_setValue("user_id",objectList[0].user_id); let img_table = $('html').find("#x_set") img_table.css("background","url(" + objectList[0].full_avatar_url + ")") this.config.user_id = objectList[0].user_id; this.config.user_list = objectList; // console.log(this.config.user_list) this.config.full_name = objectList[0].full_name; this.config.clazz_course_id = classListData[0].id let obj={ "unionid": objectList[0].user_id, "username": objectList[0].full_name, "poolId":"ec942b0b-38c6-3256-b0e1-2a33428d4bbc", "grade": "云班课", }; return obj } async upload_all_problem(show_aner){ let classListData = await (this.join_class()); if(!classListData){ return; } classListData.forEach(ccid=>{ GM_setValue(ccid.id,ccid.course.name);//对应课名 // console.log(ccid); }) this.config.class_size = 0 this.config.class_length = 0 let aner = $('html').find("#aner") if(show_aner){ aner.text("欢迎您的第一次使用,正在为您聚合数据中,请稍后。。。。"); aner.css("display","block") } for(let i=0;i{ $(result).find(".interaction-row").each(async (index,div)=>{ let id = $(div).attr('data-id'); let type = $(div).attr('data-type'); let status = $(div).attr('data-row-status'); if(type=="QUIZ"){ if(!GM_getValue(id)){ this.config.class_length++; this.config.class_size++; try{ await(this.get_quiz_result(id,this.config.user_id,cl.id)); console.log(id+"upload成功") }catch{ console.log(id+"upload失败") } this.config.class_size--; if(show_aner){ aner.text("百分比长时间未动请刷新页面\n已加载:"+Math.trunc((1-(this.config.class_size/this.config.class_length))*100)+"%"); } } } }) }); } } async get_quiz_result(id,user_id,clazz_course_id){ var classname = GM_getValue(clazz_course_id) if(!classname){ let classListData = await (this.join_class()); if(!classListData){ return; } classListData.forEach(ccid=>{ GM_setValue(ccid.id,ccid.course.name);//对应课名 // console.log(ccid); }) var classname = GM_getValue(clazz_course_id) if(!classname){ classname = "未命名课程"; } } let res = await (this.personResult(id,user_id,clazz_course_id)); var status = "error"; // if(res.result_code != 0){ // return alert(res.result_msg); // } let answers = this.reset_answer(res); if(answers == null || JSON.stringify(answers) == '{}' ){ return status; } let obj={ "poolId": this.config.poolId, "userId": this.config.tk_uid, "tags":[classname,answers.title,"云班课"], "title":answers.id, "problems":[], }; let data={}; answers.rows.forEach(row=>{ if(row.subject.length < 4 || row.answers == ""){ console.log("题目录入有误"); return; //跳出循环 } data={ "tags": ["云班课"], "text": row.subject, "answer": JSON.stringify(row.answers), }; data.tags.push(row.type); let l = ["choice_A","choice_B","choice_C","choice_D","choice_E","choice_F","choice_G","choice_H","choice_I","choice_J","choice_K","choice_L","choice_M","choice_N","choice_O","choice_P","choice_Q","choice_R","choice_S","choice_T","choice_U","choice_V","choice_W","choice_X","choice_Y","choice_Z"]; let i=0; row.options.forEach(option =>{ data[l[i]]=option; i=i+1; }) obj.problems.push(data); }); if(obj.problems.length == 0){ return; } await(window.my.upladApi(window.my.MainIP+"/tiku/api/v1/problems",obj).then((resutData)=>{ console.log(resutData) if(resutData.result=="success" && resutData.json){ var data = resutData.json.data; console.log(data); GM_setValue(id,1); status = "success" }else{ console.log(resutData); } })); return status; } reset_answer(data){ let newData = {}; if(data ==null){ return console.log("并未获取到题库数据"); } if("activity" in data){ console.log("蓝墨云题库重组中"); newData.id = data.activity.id; newData.title = data.activity.title; newData.rows = []; data.activity.topics.forEach(row=>{ let _data = {}; _data.id = row.topic_id; let imgs =null; try{ imgs = $.parseHTML(row.subject); // 去除特殊字符报错 }catch (e){ console.log(e); } row.subject=window.my.HtmlUtil.htmlDecode(row.subject); if(imgs){ imgs.forEach(async function(img,index){ if(img.localName == "img"){ row.subject += img.outerHTML; } }) } // row.subject = row.subject.substr(0,500) //截断前500个字符 _data.subject = row.subject; _data.options = []; _data.answers = []; _data.type = row.type; if(row.type == "TF"){ if(row.tf_answer!=null){ _data.answers.push(row.tf_answer); }else{ if(row.result == 1){ _data.answers.push(row.user_tf_answer) }else{ _data=null; } } }else if(row.type == "FILL"){ row.fill.blank_alternatives.forEach(answer=>{ if(answer.contents[0] !=null){ _data.answers.push(answer.contents); }else{ if(answer.result ==1){ _data.answers.push(answer.user_content) }else{ _data=null; } } }); }else{ if(row.answers.length != 0){ row.options.forEach(option=>{ _data.options.push(window.my.HtmlUtil.htmlDecode(option.content)); row.answers.forEach(index =>{ if(option.item_no == index){ _data.answers.push(window.my.HtmlUtil.htmlDecode(option.content)); } }); }); }else{ if(row.result == 1){ row.options.forEach(option=>{ _data.options.push(window.my.HtmlUtil.htmlDecode(option.content)); row.user_answers.forEach(index =>{ if(option.item_no == index){ _data.answers.push(window.my.HtmlUtil.htmlDecode(option.content)); } }); }); }else{ _data=null; } } } if(_data != null){ newData.rows.push(_data); } }); }else{ console.log(data); } return newData; } async main_resource(reslist){ var watch = reslist[0] var req = {} if (reslist.length != 0) { $("#x_res").text("剩下" + reslist.length + "个") } else { $("#x_res").text("全部完成") location.reload() return 0 } var clazz_course_id = this.config.clazz_course_id $.ajax({ type: "POST", url: "https://www.mosoteach.cn/web/index.php?c=res&m=request_url_for_json", data: { 'file_id': watch.id, 'type': 'VIEW', 'clazz_course_id': clazz_course_id, }, dataType: "json", success: msg => { const src = msg.src if (src.indexOf("m3u8") > -1) { fetch(src) .then(data => data.text()) .then(text => { let time = 0 for (i of text.split("\n")) { if (i.indexOf("#EXTINF:") > -1) { i = parseFloat(i.replace("#EXTINF:", "")) time += i } } time = Math.ceil(time) $.ajax({ type: 'post', dataType: 'json', url: 'https://www.mosoteach.cn/web/index.php?c=res&m=save_watch_to', data: { clazz_course_id: clazz_course_id, res_id: watch.id, watch_to: time, duration: time, current_watch_to: time }, success: res => { reslist.splice(0, 1) this.main_resource(reslist) } }); }) } else { reslist.splice(0, 1) this.main_resource(reslist) } } }) } resource_farming(reslist){ var reslist = [] $(".res-row-open-enable").each(function() { if ($(this).find('span[data-is-drag]')[0].dataset.isDrag == "N") { reslist.push({ id: $(this).attr('data-value'), state: $(this).find('span[data-is-drag]')[0].dataset.isDrag, type: $(this).attr('data-mime') }) } }); this.main_resource(reslist) } async start_search(){ //搜题按钮实现 const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) function random(min, max) { return Math.floor(Math.random() * (max - min)) + min; } let HtmlUtil = window.my.HtmlUtil; let aner = $('html').find("#aner") aner.css("display","block") aner.text("正在搜索中,请稍后") let upload_paper_flag = false; let answers = await(window.my.getAnswers(this.config.id,true)); if(this.config.tk_uid == null || (answers == null)||JSON.stringify(answers) == '{}' || answers.rows.length <= 0){ let subjects = [] $('.topic-item').each(function(index,div){ let Id = $(div).find('a').attr('name'); let subject = $(div).find('.t-subject.t-item.moso-text.moso-editor').text().trim(); let imgs = $(div).find("img"); // console.log(imgs) subject = HtmlUtil.htmlDecode(subject); imgs.each(async function(index,img){ if(img.outerHTML){ subject += img.outerHTML; } }) if(subject != ""){ subjects.push(subject); } }) answers = await(window.my.findproblems(subjects)); upload_paper_flag = true } if(JSON.stringify(answers) == '{}' || !(answers.rows)){ aner.text("没有搜索到答案,若提前阅卷时有答案,但此时没有请反馈") }else{ aner.text("总共搜索到"+answers.rows.length+"题") answers.rows.forEach(row=>{ aner.append("
"); aner.append("题目:"+row.subject+"
"+"答案:"); row.answers.forEach(answer =>{ aner.append(answer+" "); }); }); } window.my.config.timenum = answers.rows.length * 4 * (GM_getValue("is_wait") ? 0:1) $(".my-sticky-bottom").children("button:first").attr('id', 'submit') window.my.config.timer = setInterval(function() { window.my.config.timenum-- if (window.my.config.timenum < 0) { $("#submit").text("交卷") $("#submit").attr("style", "") $("#submit").attr('disabled', false) clearInterval(window.my.config.timer) } else { $("#submit").attr('disabled', true) $("#x_start").attr('disabled', true) $("#submit").attr("style", "width:250px") $("#submit").text("请在" +window.my.config.timenum +"秒后交卷") } }, 1000) // $('.topic-item').each(function(index,div){ // 如果是这个后面记得加括号 let divs = $('.topic-item'); for(let i=0;i") } answers.rows.forEach((row,index)=>{ if(row.subject == subject){ if(!$(div).find('.show_answer')[0].outerText){ $(div).find('.show_answer').append("答案:"+JSON.stringify(row.answers)+"
").css('color','red'); // 添加答案在后方 }else{ $(div).append("第"+(i+1)+"题重复
").css('color','blue'); $(div).find('.show_answer').append("答案:"+JSON.stringify(row.answers)+"
").css('color','red'); // 添加答案在后方 } } }); let $options = $(div).find('label'); if($options.length == 0){ $options = $(div).find('input'); } for(let index = 0;index{ if(row.checked < row.answers.length){ delete answers.rows[index]; return; } for(let q =index+1;q{ if(resutData.result==="success" && !!resutData.json){ var data = resutData.json.results; console.log("总共查询到数据库数量"+data.length+"个"); data.forEach((item, index) =>{ if(index == 0){ answers =this.resoluAnswers(item); }else{ this.resoluAnswers(item).rows.forEach(i =>{ answers.rows.push(i); }) } }); } })); return answers; } MyPage.prototype.arrowMove = function(e){ // var e = document.getElementById(e); // 元素大小 let elW = e.currentTarget.offsetWidth let elH = e.currentTarget.offsetHeight // 元素位置 let elL = e.currentTarget.parentNode.parentNode.offsetLeft let elT = e.currentTarget.parentNode.parentNode.offsetTop // 鼠标位置 let x = e.clientX let y = e.clientY // 窗口大小 let w = window.innerWidth let h = window.innerHeight // 鼠标到元素左边距离 let moveX = x - elL let moveY = y - elT let el = e.currentTarget document.onmousemove = function (e) { // el.style.position = 'fixed'; el.parentNode.parentNode.style.left = e.clientX -moveX + 'px' el.parentNode.parentNode.style.top =e.clientY - moveY + 'px' } document.onmouseup = function (e) { document.onmousemove = null document.onmouseup = null } }; MyPage.prototype.initMenu = function(){ let $ = this.$,menu = this.menu; $(document).on('mousedown', '#x_set', function (e) { window.my.arrowMove(e);//.target.parentNode.id }); $(document).on('click', '#x_start', function () { window.my.start(); }); $(document).on('click', '#x_set', function () { $('html').find("#set").toggle('active'); $('html').find("#aner").hide("slow"); }); // $(document).on('click', '#x_charge', function () { // let aner = $('html').find("#aner") // aner.css("display","block") // aner.text(""); // aner.append("充电地址:"); // }); $(document).on('click', '#x_find',async function () { let aner = $('html').find("#aner") let text = document.getElementById("find_input") aner.show("slow"); aner.text(""); if(text.value.length <6){ aner.append("搜索题目需要6个字符以上"); return; } aner.append("若长时间未返回信息,请反馈
"); // problem = window.my.HtmlUtil.htmlDecode(text.value); // console.log(problem) await window.my.findproblem(text.value.replace(/ /g,"   ")) aner.text(""); aner.append("搜索到"+window.my.config.answer.rows.length+"条相关题目
"); window.my.config.answer.rows.forEach(row=>{ aner.append("题目:"+row.subject+"
"+"答案:"); row.answers.forEach(answer =>{ aner.append(answer+" "); }); aner.append("
"); }); }); $(document).on('click', '#x_AIfind',async function () { let aner = $('html').find("#aner") let text = document.getElementById("find_input") aner.show("slow"); aner.text(""); if(text.value.trim() == ""){ aner.append("请输入内容"); return; } aner.append("若长时间未返回信息,请反馈
"); let obj ={ "messages": [ { "role": "user", "content": text.value } ], "stream": true, "model": "gpt-3.5-turbo", "temperature": 0.5, "presence_penalty": 0, "frequency_penalty": 0, "top_p": 1 }; GM_xmlhttpRequest({ responseType:"stream", timeout: 10000, method: "post", url: window.my.ChatIP+"/api/openai/v1/chat/completions", headers:{ // Authorization:'Bearer nk-wangzeqing', Authorization:'Bearer nk-'+window.my.config.tk_uid+","+window.my.config.poolId, // Cookie:"next-auth.csrf-token=e8b5559fadb5ce3684e9a0611591684ffffc2224d9125a49e7081a92425c3026%7C47d575638e3a14f787462c27c1fe8895d740210370848182a740fa71dfb55211; next-auth.callback-url=http%3A%2F%2Flocalhost%3A3000; next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..wNFkEP1XItcDCpY2.nJBc4rvu8_cAGx0mtDdm2pvIjPAWGMGou24L2ZzoyImrCIqLDiAMS5w6WzN6dm_8GuI331tfqxHc_V4LRoAmmFT0A8X5ln9C1iC4p47IQM_4RF2B-8iLGElCkVOYJieCkvV1lVrFHVT31nzI12n8Xpwttrw5yGhywCR3sWZ1J7sr4QCXeCA-lpOdITDyW8AdNPjH4QQ7vhtCIzjzFoepmJKk5mE2lPmksDiGrQX3d1POPwfQqdHafb8rgZJl_BC4_wDXloIt6mtTfQ4._NPSNHQIhsWS5eQprCIeCQ", }, data: JSON.stringify(obj), onloadstart: function(response) { aner.text(""); // console.log(response.response) const reader = response.response.getReader(); var error_d = ""; function read() { reader.read().then(({ done, value }) => { if (done) { console.log('读取完毕'); return; } let data = new TextDecoder().decode(value) data.split("data:").forEach(d=>{ if(d!=""&&d.indexOf("[DONE]") == -1){ let Json_msg=null; try{ if(error_d){ d = error_d +d; error_d=""; } Json_msg = $.parseJSON(d) if(Json_msg.msg=="empty access code"||Json_msg.msg=="wrong access code"){ aner.append("若需要使用AI功能请先"); return; }else if(Json_msg.msg=="剩余token不足请[充值](https://d.met0.top/)"){ aner.append("您的AI剩余TOKEN已不足请
未登陆账号请"); return; } aner.append(Json_msg.choices[0].delta.content); aner.scrollTop(aner.prop("scrollHeight")); }catch (e){ if(Json_msg){ aner.append("发生异常:" + d); }else{ console.log("发生异常:" + d) } error_d=d; } } }); // console.log($.parseJSON(data)); // 继续读取下一个数据块 read(); }); } // 开始读取数据 read(); }, onerror : function(err){ console.log('error') aner.append("发生异常:" + err); }, ontimeout : function(inf){ console.log('请求超时') aner.append("请求超时:" + inf); } }) }); $(document).on('click', '#x_yue', async function () { let aner = $('html').find("#aner") aner.show("slow"); $("#x_yue").attr("disabled", true) aner.text("正在搜索答案中"); let answers = await(window.my.getAnswers(window.my.config.id,true)); if(!answers||JSON.stringify(answers) == "{}"){ aner.text("暂时没有此试卷信息。可直接开始答题进行搜索(可能最终答案没那么全)"); return; } aner.text("搜索到"+ answers.rows.length +"条题目信息"); answers.rows.forEach(row=>{ aner.append("
"); aner.append("题目:"+row.subject+"
"+"答案:"); row.answers.forEach(answer =>{ aner.append(answer+" "); }); }); }); $(document).on('click', '#x_res', async function () { $("#x_res").attr("disabled", true) window.my.x_res() }); $(document).on('click', '#x_recall', async function () { $("#"+menu.id).css("left","0").css("top","0"); $(".drawer").hide(); $(".t-answer").each((index,div) =>{ $(div).append("") $(div).find("span").css("color","#FFF").css("display","block").css("width","70px").css("font-size","25px").css("border","1px solid black").click(function(_this){ $(_this.currentTarget).css("color","#0bd") }); $(div).find(".answer-r").hide(); }) }); $(document).on('click', '#x_error_problems', async function () { let error_problem = GM_getValue(window.my.config.id+"_error_problem"); if(!error_problem){ error_problem = {}; alert("您还未建立错题集"); return; } $("#"+menu.id).css("left","0").css("top","0"); $(".drawer").hide(); $(".topic-list").text(""); for (var i in error_problem) { $(".topic-list").append(error_problem[i]); }; $(".t-answer").each((index,div) =>{ $(div).find("span").css("color","#FFF").css("display","block").css("width","70px").css("font-size","25px").css("border","1px solid black").click(function(_this){ $(_this.currentTarget).css("color","#0bd") }); }); }); $(document).on('click', '.addpro', async function (_this) { $(_this.currentTarget).attr("class","delpro").css("background","#f2ffc9").text("移出错题集"); let error_problem = GM_getValue(window.my.config.id+"_error_problem"); if(!error_problem){ error_problem = {}; console.log("新建错题库"); } error_problem[$(_this.currentTarget.offsetParent).find(".t-index").text()] = _this.currentTarget.offsetParent.outerHTML; GM_setValue(window.my.config.id+"_error_problem",error_problem); console.log(error_problem); }); $(document).on('click', '.delpro', async function (_this) { $(_this.currentTarget).attr("class","addpro").css("background","#c9fff5").text("添加到错题"); let error_problem = GM_getValue(window.my.config.id+"_error_problem"); delete error_problem[$(_this.currentTarget.offsetParent).find(".t-index").text()]; GM_setValue(window.my.config.id+"_error_problem",error_problem); }); /** * MosoteachHelper CSS */ const styleTag = ` `; $(styleTag).appendTo('head'); let $menu = $( `
用户: ${GM_getValue("ti_uid")?``:``}
题目:
本项目非盈利,仅ai功能需登陆使用,欢迎给项目发电,大家的支持才是我开发的动力

正在获取试卷中,请稍等

`); $($menu).appendTo('html'); this.aner = $('#aner'); // GM_setValue("update_time","") // if(!GM_getValue("update_time") || GM_getValue("update_time")+12 < Date.now()/1000/60/60){//每12小时更新脚本 // console.log($("#set")) // $("#set").css("display","block") // // this.aner.css("display","block") // // this.aner.text("检测版本更新"); // // this.aner.append('

此页面仅在首次加载时出现

网络讨口子来咯(商家码)

') // GM_setValue("update_time",Date.now()/1000/60/60) // GM_xmlhttpRequest({ // method: "GET", // url: "https://gitee.com/xiaolv12/yunbanke/raw/master/%E7%AD%94%E9%A2%98%E5%8A%A9%E6%89%8B.js", // onload: res=> { // GM_setValue("window.al_yun_xx",res.response); // }, // onerror:err=>{ // console.log("加载失败") // } // }) // } // if(parseFloat(this.version) > parseFloat(GM_info.script.version) ){ // GM_setValue("window.al_yun_xx",null); // alert("脚本存在新版本,请及时更新"); // window.location.href=GM_info.scriptUpdateURL // } } MyPage.prototype.initData = async function(){ //初始化 GM_registerMenuCommand("基本设置",function(){ $('html').find("#set").toggle('active'); }); GM_registerMenuCommand(GM_getValue("is_wait") ? "开启延迟交卷" : "关闭延迟交卷(不建议)" ,function(){ GM_setValue("is_wait",!GM_getValue("is_wait")); location.reload(); }); GM_registerMenuCommand("重置脚本",function(){ GM_setValue("overdue",1); GM_setValue("window.al_yun_xx",null); location.reload(); }); document.getElementById("tiku_user").value=this.config.tk_uid; switch (this.config.hostname){ case "mooc.mosoteach": if(this.config.c === "res"||this.config.front_url.at(-1) === "course-learning"){ $('#zhu').append(""); }else{ $('#zhu').append(""); } break; case "mosoteach": { if(this.config.m === "reply"){ // // this.Listener(); $('#zhu').append(""); // document.getElementById("zhu") }else if(this.config.c === "res"||this.config.front_url.at(-1) === "course-learning"){ $('#zhu').append(""); }else if(this.config.m === "quiz_ranking" || this.config.m === "start_quiz_confirm"){ $('#zhu').append(""); }else if(this.config.m === "person_quiz_result"){ // $('#zhu').append(""); $('#zhu').append(""); $('#zhu').append(""); let aner = $('html').find("#aner") aner.css("display","block") aner.text("正在导入题库中"); if(!GM_getValue(this.config.id)){ flag = await(this.api.get_quiz_result(this.config.id,this.config.user_id,this.config.clazz_course_id)); if(flag == "success"){ aner.text("题库导入成功"); }else{ aner.text("题库导入失败"); } }else{ aner.text("题库已存在"); } }else{ $('#zhu').append(""); } break; } case "zhihuishu": { if(this.config.front_url.at(5) == "checkHomework"){ let aner = $('html').find("#aner") aner.css("display","block") aner.text("正在导入题库中"); let examId = this.config.examId||this.config.id; let taskId = this.config.recordId||this.config.taskId; let obj = { recruitId: this.config.front_url[6], studentExamId: this.config.front_url[7], examId: this.config.front_url[8], schoolId: this.config.front_url[10], courseId: this.config.front_url[9], } if(!GM_getValue(obj.examId)){ let server_token = await(labc(3)) flag = await(this.api.get_quiz_result(server_token,obj)); if(flag == "success"){ aner.text("题库导入成功"); }else{ aner.text("题库导入失败"); } }else{ aner.text("题库已存在"); } }else{ $('#zhu').append(""); } break; } case "icve": { if(this.config.front_url.at(-1) == "keepTest"||this.config.front_url.at(-1) =="jobTest"){ // // this.Listener(); $('#zhu').append(""); }else if(this.config.front_url.at(-1) =="course-learning"){ //暂未实现 留置 $('#zhu').append(""); }else if(this.config.front_url.at(-1) == "viewJob1"){ let aner = $('html').find("#aner") aner.css("display","block") aner.text("正在导入题库中"); let examId = this.config.examId||this.config.id; let taskId = this.config.recordId||this.config.taskId; if(!GM_getValue(examId+taskId)){ flag = await(this.api.get_quiz_result(examId,taskId,"独立导入")); if(flag == "success"){ aner.text("题库导入成功"); }else{ aner.text("题库导入失败"); } }else{ aner.text("题库已存在"); } }else{ $('#zhu').append(""); } break; } case "ouchn":{ if(this.config.front_url.at(5) =="ng#" ||this.config.front_url.at(5) =="ng" ){ GM_setValue("resource_farming_state",false) // 跨域访问,清空默认状态 $('#zhu').append(""); }else if(this.config.front_url.at(5) =="learning-activity"){ this.api.choice_function() if(GM_getValue("resource_farming_state")){ $('#zhu').append(""); this.aner.show("hide") this.aner.text("如需暂停请刷新上一级页面") }else{ if(GM_getValue("resource_farming_main_state")){ $('#zhu').append(""); }else{ $('#zhu').append(""); } } } else{ $('#zhu').append(""); } break; } case "yuketang":{ if(this.config.front_url.at(-1) =="studycontent"){ GM_setValue("resource_farming_state",false) // 跨域访问,清空默认状态 $('#zhu').append(""); }else if(this.config.front_url.at(-2) =="video"){ this.api.choice_function() if(GM_getValue("resource_farming_state")){ $('#zhu').append(""); this.aner.show("hide") this.aner.text("如需暂停请刷新上一级页面") }else{ if(GM_getValue("resource_farming_main_state")){ $('#zhu').append(""); }else{ $('#zhu').append(""); } } } else{ $('#zhu').append(""); } break; } case "chaoxing": if(this.config.c === "res"||this.config.front_url.at(-1) === "course-learning"){ $('#zhu').append(""); }else{ $('#zhu').append(""); } break; } } MyPage.prototype.toLog=function(explain){ /* * 全局定时器 */ let find_input = document.getElementById("find_input"); var flag=true; setInterval(()=> { if(this.config.front_url.at(-1) != window.location.href.split("?")[0].split("/").at(-1)){ location.reload() } let yaya_select = window.getSelection().toString(); if(yaya_select){ find_input.value = window.getSelection().toString() } if($("video").length&&flag){ flag = false window.my.video_spend() } }, 400) // alert('啊绿: '+explain); this.initData(); return this; } MyPage.prototype.findproblem = async function(text){ let obj={ "poolId": this.config.poolId, "userId": this.config.tk_uid, "querry": { "operator": "contains", "argument1":"problemText", "argument2":text, } } ///// await(this.upladApi(this.MainIP+"/tiku/api/v1/queryProblems",obj).then(async (resutData)=>{ if(resutData.result==="success" && !!resutData.json){ var data = resutData.json.results; //处理数据,添加标识头 let obj = { flag: "metoproblems", problems : data, } this.config.answer =this.resoluAnswers(obj); } })) } MyPage.prototype.findproblems = async function(problems){ let answer = [] let obj={ "poolId": this.config.poolId, "userId": this.config.tk_uid, "querry": { "operator": "mulit", "argument1":"1", "argument2":"2", "problems":[] } } ///// problems.forEach(problem =>{ let problemobj = { "operator": "==", "argument1": "problemText", "argument2": problem, } obj.querry.problems.push(problemobj); }) await(this.upladApi(this.MainIP+"/tiku/api/v1/queryProblems",obj).then(async (resutData)=>{ if(resutData.result==="success" && !!resutData.json){ var data = resutData.json.results; //处理数据,添加标识头 let obj = { flag: "metoproblems", problems : data, } answer = this.resoluAnswers(obj) // console.log(this.config.answers); } })) return answer } MyPage.prototype.upload_papers = async function(answers,title,platform){ var classname = GM_getValue(this.config.clazz_course_id) if(!classname){ classname = "未命名课程"; } let obj={ "poolId": this.config.poolId, "userId": this.config.tk_uid, "problemIds": [], "title":title, "tags":[classname,platform], } answers.rows.forEach(row=>{ for(let i =0;i{ if(resutData.result==="success" && !!resutData.json){ // var data = resutData.json.results; console.log(resutData); } })) } MyPage.prototype.Listener = function(){ //本来想做监听上传试卷,后来想想算了。 $('body').append( `