// ==UserScript== // @name 棚子免费🙆‍♂️支持所有答题|考试必备!!|题目搜索|万能答题|解除复制限制|快速回答|AI搜题|AI问答|AI生图|AI聊天||防检测|考试拿满分| // @version 2.85 // @description 【😉♂️已完美兼容、智慧树、中国大学mooc、慕课、雨课堂、新国开、超星、学习通、知到、国家开放大学、蓝墨云、职教云、智慧职教、云班课精品课、剩余网站仅支持部分功能✨】、【🎇完美应付考试、测试,一键搜题😎】、【兼容、U校园、学堂在线】、【🎉新增AI搜题、AI问答,AI生图,Ai聊天定制化服务🥳】、【💙强制破除网站不可复制文字💙】、【🐮基于生成式AI(ChatGPT)的答案生成🐮】、【有其他平台支持需要的请加群催更:😄834934149😄,共同交流进步脚本无任何诸如(手机号,学校信息,等隐私信息)收集💚】 // @author 棚子 // @note 会员单:@小李 @不会服输的 @小日 @逆熵学园 @我有一个梦想 // @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/* // @match *://*.icourse163.org/* // @match *://*.xuetangx.com/* // @namespace https://a.wpzllq.top // @supportURL https://a.wpzllq.top // @icon https://mj.wpzllq.top/ta.jpg // @require https://code.jquery.com/jquery-3.6.0.js // @license MIT // @grant GM_getValue // @grant GM_addStyle // @grant unsafeWindow // @connect 127.0.0.1 // @connect * // ==/UserScript== (function(_this) { function MyPage(menu) { this.aner = null; this.version = "5.2"; this.$ = $; this.menu = menu; this.config = this.urlToObject(window.location.href); this.api = this.getAPI(this.config.hostname); 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"; } else if (url.includes("icourse163")) { obj.hostname = "mooc"; } else if (url.includes("unipus.cn")) { obj.hostname = "uschool"; } else if (url.includes("xuetangx.com")) { obj.hostname = "xuetangx"; } if (arr1[1]) { let arr2 = arr1[1].split("&"); for (let i = 0; i < arr2.length; i++) { let res = arr2[i].split("="); obj[res[0]] = res[1]; } } return obj; } MyPage.prototype.getAPI = function(hostname) { switch (hostname) { case "mooc.mosoteach": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("精品云班课脚本准备中"); return new jpyunbanke_api(this.config); case "mosoteach": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("云班课脚本准备中"); return new yunbanke_api(this.config); case "zhihuishu": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("智慧树脚本准备中"); return new zhihuishu_api(this.config); case "icve": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("智慧职教脚本准备中"); return new icve_api(this.config); case "meto": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("meto脚本准备中"); return new meto_api(this.config); case "ouchn": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("国开脚本准备中"); return new ouchn_api(this.config); case "chaoxing": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("超星脚本准备中"); return new chaoxin_api(this.config); case "yuketang": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("雨课堂脚本准备中"); return new yuketang_api(this.config); case "mooc": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("慕课脚本准备中"); return new mooc_api(this.config); case "uschool": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("U校园脚本准备中"); return new uschool_api(this.config); case "xuetangx": var user = [{ 赞助者: '逆熵学院', 金额: 50, 性别: '男' }, { 赞助者: '棚子', 金额: 50, 性别: '男' }, { 赞助者: '小李', 金额: 30, 性别: '女' }, { 赞助者: '卧龙', 金额: 9.9, 性别: '男' }, { 赞助者: 'm70069629', 金额: 9.9, 性别: '男' }, { 赞助者: '波比', 金额: 5.5, 性别: '男' }, { 赞助者: 'yianann', 金额: 5.5, 性别: '男' }, { 赞助者: '泽伊', 金额: 5.5, 性别: '男' } ] console.table(user) console.log("学堂在线脚本准备中"); return new xuetangx_api(this.config); default: return null; } }; /* * u校园请求 */ class uschool_api { constructor(config) { this.config = config; } } /* * 学堂在线请求 */ class xuetangx_api { constructor(config) { this.config = config; } } /* * mooc请求 */ class mooc_api { constructor(config) { this.config = config; } } /* * 雨课堂请求 */ class yuketang_api { constructor(config) { this.config = config; } } /* * 超星请求 */ class chaoxin_api { constructor(config) { this.config = config; } } /* * 国开请求 */ class ouchn_api { constructor(config) { this.config = config; } sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) } /* * meto请求 */ class meto_api { constructor(config) { this.config = config; } } /* * 智慧职教请求 */ class icve_api { constructor(config) { this.config = config; } } /* * 智慧树请求 */ class zhihuishu_api { sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) constructor(config) { this.config = config; } } /* * 精品云班课请求 */ class jpyunbanke_api { constructor(config) { this.config = config; } } /* * 云班课请求 */ class yunbanke_api { constructor(config) { this.config = config; } } // 鼠标拖动样式 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"); }); //按f2显示或隐藏#x_set菜单 $(document).on('keydown', function(e) { if (e.key === 'F8') { if ($('#x_set').is(':visible')) { $('#wzq').hide(); $('#x_set').hide(); alert("隐藏菜单"); } else { $('#wzq').show(); $('#x_set').show(); alert("显示菜单"); } } }); /** * MosoteachHelper CSS */ const styleTag = ` `; $(styleTag).appendTo('head'); let $menu = $( `
`); $($menu).appendTo('html'); this.aner = $('#aner'); } _this.MyPage = MyPage; })(unsafeWindow || window); if (window.location == window.parent.location) { // 判断是否为ifarm window.my = new unsafeWindow.MyPage({ id: "wzq", width: 80, background: '#fff', opacity: 0.8, pos: { x: 100, y: 100 } }) } (function() { 'use strict'; // 域名规则列表 var rules = { black_rule: { name: "black", hook_eventNames: "", unhook_eventNames: "" }, default_rule: { name: "default", hook_eventNames: "contextmenu|select|selectstart|copy|cut|dragstart", unhook_eventNames: "mousedown|mouseup|keydown|keyup", dom0: true, hook_addEventListener: true, hook_preventDefault: true, hook_set_returnValue: true, add_css: true } }; // 域名列表 var lists = { // 黑名单 black_list: [ /.*\.youtube\.com.*/, /.*\.wikipedia\.org.*/, /mail\.qq\.com.*/, /translate\.google\..*/ ] }; // 要处理的 event 列表 var hook_eventNames, unhook_eventNames, eventNames; // 储存名称 var storageName = getRandStr('qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM', parseInt(Math.random() * 12 + 8)); // 储存被 Hook 的函数 var EventTarget_addEventListener = EventTarget.prototype.addEventListener; var document_addEventListener = document.addEventListener; var Event_preventDefault = Event.prototype.preventDefault; // 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 (this && 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() { var elements = getElements(); for (var i in elements) { for (var j in eventNames) { var name = 'on' + eventNames[j]; 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; } } } } } // 返回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; } // 获取随机字符串 function getRandStr(chs, len) { var str = ''; while (len--) { str += chs[parseInt(Math.random() * chs.length)]; } return str; } // 获取所有元素 包括document function getElements() { var elements = Array.prototype.slice.call(document.getElementsByTagName('*')); elements.push(document); return elements; } // 添加css function addStyle(css) { var style = document.createElement('style'); style.innerHTML = css; document.head.appendChild(style); } // 获取目标域名应该使用的规则 function getRule(url) { function testUrl(list, url) { for (var i in list) { if (list[i].test(url)) { return true; } } return false; } if (testUrl(lists.black_list, url)) { return rules.black_rule; } return rules.default_rule; } // 初始化 function init() { // 获取当前域名的规则 var url = window.location.host + window.location.pathname; var rule = getRule(url); // 设置 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, 30 * 1000); setTimeout(clearLoop, 2500); window.addEventListener('load', clearLoop, true); clearLoop(); } // hook addEventListener if (rule.hook_addEventListener) { EventTarget.prototype.addEventListener = addEventListener; document.addEventListener = addEventListener; } // hook preventDefault if (rule.hook_preventDefault) { Event.prototype.preventDefault = function() { if (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 && eventNames.indexOf(this.type) >= 0) { this.returnValue = true; } }); } console.debug('url: ' + url, 'storageName:' + storageName, 'rule: ' + rule.name); // 添加CSS if (rule.add_css) { addStyle('html, * {-webkit-user-select:text!important; -moz-user-select:text!important;}'); } } init(); })(); (function() { 'use strict'; function customAlert() { var modal = document.createElement("div"); // modal.style.display = "block"; // modal.style.width = "300px"; // modal.style.position = "absolute"; // modal.style.zIndex = "999999"; // modal.style.backgroundColor = "rgba(255, 255, 255, 1)"; // 修改颜色值为不透明 // modal.style.border = "2px solid #333"; // modal.style.borderRadius = "20px"; // modal.style.padding = "10px"; var closeButton = document.createElement("button"); // closeButton.textContent = "关闭"; // closeButton.style.position = "absolute"; // closeButton.style.top = "-25px"; // closeButton.style.right = "5px"; // closeButton.style.backgroundColor = "#3df6ff"; // 修改属性名称为 backgroundColor // closeButton.style.borderRadius = "20px"; // closeButton.style.width = "50px"; // closeButton.style.height = "20px"; // closeButton.style.border = "none"; // 移除冒号 // closeButton.style.cursor = "pointer"; // closeButton.style.color = "#333"; // closeButton.style.fontSize = "12px"; // closeButton.style.padding = "0"; // closeButton.style.outline = "none"; // Remove outline on focus // closeButton.style.transition = "color 0.3s ease"; // Smooth color transition on hover closeButton.addEventListener("mouseenter", function() { closeButton.style.color = "#ff0000"; // Change color on hover }); closeButton.addEventListener("mouseleave", function() { closeButton.style.color = "#333"; // Restore original color when not hovered }); closeButton.addEventListener("click", function() { modal.style.display = "none"; }); var message = document.createElement("p"); // message.textContent = "棚子考试亲测没问题,\n解决考试不能复制烦恼,\n刷课中按F2可以调整倍数,\n按F12控制台有各位老板的赞赏名单\n抢先免费体验入群,\n834934149,"; // message.style.fontFamily = "Arial, sans-serif"; // message.style.fontSize = "14px"; // message.style.color = "#333"; var link = document.createElement("a"); // link.href = "https://dhl.wpzllq.cn"; // link.textContent = "https://dhl.wpzllq.cn"; link.style.color = "blue"; link.style.textDecoration = "underline"; message.appendChild(link); modal.appendChild(closeButton); modal.appendChild(message); document.body.appendChild(modal); // Get the element with id "zhu" var targetElement = document.getElementById("zhu"); if (targetElement) { // Calculate the position of the target element var targetRect = targetElement.getBoundingClientRect(); // Set the position of the modal relative to the target element modal.style.left = targetRect.left + "px"; modal.style.top = targetRect.bottom + 10 + "px"; // Adjust 10px to position below the target element } else { // If the target element is not found, position the modal in the center of the viewport modal.style.left = "50%"; modal.style.top = "50%"; modal.style.transform = "translate(-50%, -50%)"; } } // Trigger custom alert function customAlert(); })(); (function() { 'use strict'; let currentRate = 1.0; function setPlaybackRate(rate) { const videos = document.querySelectorAll('video'); videos.forEach(video => { video.playbackRate = rate; }); } document.addEventListener('keydown', function(event) { if (event.code === 'F2') { const rate = prompt('设置加速倍速 (1-16),脚本无效请加群催更:😄834934149😄:', currentRate); if (rate !== null && !isNaN(rate)) { const parsedRate = parseFloat(rate); if (parsedRate >= 1 && parsedRate <= 16) { currentRate = parsedRate; setPlaybackRate(currentRate); } else { alert('无效的速度!请输入1到16之间的值.'); } } } }); setPlaybackRate(currentRate); })();