// ==UserScript== // @name 学习平台一点通:全程自动化操作!让您彻底告别网课困扰。|超星学习通|知到|智慧树|U校园|职教云|智慧职教|慕课|签到|学习公社|AI|乐跑|国家开放大学|继续教育|雨课堂|中国大学|智慧职教|welearn|青书学堂|学起|广开等课程欢迎咨询 // @namespace yidiantong // @version 2.7 // @description 请认真查看介绍:支持学习通视频测验、作业、答题、考试(选择题、多选题、评论),答题正确率接近95+以上,具体操作可查看脚本运行页面,支持在线客服解答问题,处理问题,支持一键搜索题,支持第三方题库DeepSeek答题,本脚本不采集任何个人信息,第三方课程可支持U校园/U校园AI版、知到/智慧树、新国开、智慧职教等全国课程,更多课程正在开发中...具体流程可进咨询Q群2️⃣:1044568375 // @author 学习助手 // @license MIT // @icon https://pan-yz.chaoxing.com/favicon.ico // @connect mooc1-1.chaoxing.com // @connect mooc1.chaoxing.com // @connect mooc1-2.chaoxing.com // @connect passport2-api.chaoxing.com // @connect www.tiku.me // @connect cx.icodef.com // @connect cx.icodef.com // @connect q.icodef.com // @grant GM_getResourceText // @grant GM_getValue // @grant GM_deleteValue // @grant GM_notification // @grant GM_addValueChangeListener // @grant GM_removeValueChangeListener // @run-at document-start // @grant GM_addStyle // @grant GM_setValue // @match *://*.mooc.icve.com.cn/cms/* // @match *://*.passport2.chaoxing.com/* // @match *://*.mooc.icve.com.cn/* // @match *://*.chaoxing.com/* // @match *://*.edu.cn/* // @match *://*.www.yuketang.cn/* // @match *://*.nbdlib.cn/* // @match *://*.hnsyu.net/* // @match *://*.gdhkmooc.com/* // @match *://*.zhihuishu.com/* // @match *://*.tmall.com/* // @match *://chaoshi.detail.tmall.com/* // @match *://*.tmall.hk/* // @match *://*.liangxinyao.com/* // @match *://*.iam.pt.ouchn.cn/* // @match *://*.jd.com/* // @match *://*.jd.hk/* // @match *://*.jkcsjd.com/* // @match *://*.yiyaojd.com/* // @match *://*.vip.com/* // @match *://*.u.unipus.cn/* // @match *://*.ucloud.unipus.cn/* // @match *://*.mooc.yinghuaonline.com/user/login/* // @match *://*.umooc.ulearning.cn/* // @match *://*.www.qingshuxuetang.com/* // @match *://*.www.buu.edu.cn/* // @match *://*.www.pmphmooc.com/* // @match *://*.vipglobal.hk/* // @match *://*.welearn.sflep.com/* // @match *://*.www.ouchn.edu.cn/* // @exclude *://*.login.tmall.com/* // @exclude *://*.pages.tmall.com/* // @exclude *://*.passport.zhihuishu.com/login/* // @namespace http://a.zhuxuelo.top/index/chaxun // @homepage https://scriptcat.org/zh-CN/script-show-page/3578 // @source http://a.zhuxuelo.top/index/chaxun // @antifeature ads // @antifeature payment // ==/UserScript== (function () { 'use strict'; // _simpleGlyph: function(gl, p) { // var P = Typr["U"]["P"]; // for (var c = 0; c < gl.noc; c++) { // var i0 = c == 0 ? 0 : gl.endPts[c - 1] + 1; // var il = gl.endPts[c]; // for (var i = i0; i <= il; i++) { // var pr = i == i0 ? il : i - 1; // var nx = i == il ? i0 : i + 1; // var onCurve = gl.flags[i] & 1; // var prOnCurve = gl.flags[pr] & 1; // var nxOnCurve = gl.flags[nx] & 1; // var x = gl.xs[i], y = gl.ys[i]; // if (i == i0) { // if (onCurve) { // if (prOnCurve) P.MoveTo(p, gl.xs[pr], gl.ys[pr]); else { // P.MoveTo(p, x, y); // continue; // } // } else { // if (prOnCurve) P.MoveTo(p, gl.xs[pr], gl.ys[pr]); else P.MoveTo(p, Math.floor((gl.xs[pr] + x) * .5), Math.floor((gl.ys[pr] + y) * .5)); // } // } // if (onCurve) { // if (prOnCurve) P.LineTo(p, x, y); // } else { // if (nxOnCurve) P.qCurveTo(p, x, y, gl.xs[nx], gl.ys[nx]); else P.qCurveTo(p, x, y, Math.floor((x + gl.xs[nx]) * .5), Math.floor((y + gl.ys[nx]) * .5)); // } // } // P.ClosePath(p); // } // }, // _compoGlyph: function(gl, font, p) { // for (var j = 0; j < gl.parts.length; j++) { // var path = { // cmds: [], // crds: [] // }; // var prt = gl.parts[j]; // Typr["U"]["_drawGlyf"](prt.glyphIndex, font, path); // var m = prt.m; // for (var i = 0; i < path.crds.length; i += 2) { // var x = path.crds[i], y = path.crds[i + 1]; // p.crds.push(x * m.a + y * m.b + m.tx); // p.crds.push(x * m.c + y * m.d + m.ty); // } // for (var i = 0; i < path.cmds.length; i++) p.cmds.push(path.cmds[i]); // } // }, // pathToSVG: function(path, prec) { // var cmds = path["cmds"], crds = path["crds"]; // if (prec == null) prec = 5; // var out = [], co = 0, lmap = { // M: 2, // L: 2, // Q: 4, // C: 6 // }; // for (var i = 0; i < cmds.length; i++) { // var cmd = cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0); // out.push(cmd); // while (co < cn) { // var c = crds[co++]; // out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " ")); // } // } // return out.join(""); // }, // SVGToPath: function(d) { // var pth = { // cmds: [], // crds: [] // }; // Typr["U"]["SVG"].svgToPath(d, pth); // return { // cmds: pth.cmds, // crds: pth.crds // }; // }, // pathToContext: function(path, ctx) { // var c = 0, cmds = path["cmds"], crds = path["crds"]; // for (var j = 0; j < cmds.length; j++) { // var cmd = cmds[j]; // if (cmd == "M") { // ctx.moveTo(crds[c], crds[c + 1]); // c += 2; // } else if (cmd == "L") { // ctx.lineTo(crds[c], crds[c + 1]); // c += 2; // } else if (cmd == "C") { // ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]); // c += 6; // } else if (cmd == "Q") { // ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]); // c += 4; // } else if (cmd.charAt(0) == "#") { // ctx.beginPath(); // ctx.fillStyle = cmd; // } else if (cmd == "Z") { // ctx.closePath(); // } else if (cmd == "X") { // ctx.fill(); // } // } // }, const popup = document.createElement('div'); popup.id = 'custom-popup'; popup.innerHTML = ` `; document.body.appendChild(popup); const toast = document.createElement('div'); toast.id = 'toast'; document.body.appendChild(toast); const navButtons = document.querySelectorAll('#popup-nav button'); const tabContents = document.querySelectorAll('.tab-content'); navButtons.forEach(button => { button.addEventListener('click', () => { const tab = button.getAttribute('data-tab'); navButtons.forEach(btn => btn.classList.remove('active')); tabContents.forEach(content => content.classList.remove('active')); button.classList.add('active'); document.querySelector(`#tab-${tab}`).classList.add('active'); }); }); const closeButton = document.getElementById('popup-close'); closeButton.addEventListener('click', () => { popup.style.display = 'none'; }); document.addEventListener('keydown', (e) => { if (e.key === 'F9') { popup.style.display = 'none'; } }); let isDragging = false; let offsetX, offsetY; const header = document.getElementById('popup-header'); header.addEventListener('mousedown', (e) => { isDragging = true; offsetX = e.clientX - popup.offsetLeft; offsetY = e.clientY - popup.offsetTop; }); document.addEventListener('mousemove', (e) => { if (!isDragging) return; popup.style.left = `${e.clientX - offsetX}px`; popup.style.top = `${e.clientY - offsetY}px`; }); document.addEventListener('mouseup', () => { isDragging = false; }); const courseSearchInput = document.getElementById('course-search-input'); const courseSearchButton = document.getElementById('course-search-button'); const courseResetButton = document.getElementById('course-reset-button'); const courseResult = document.getElementById('course-result'); courseSearchButton.addEventListener('click', () => { const query = courseSearchInput.value.trim(); if (query) { searchCourse(query); } else { courseResult.textContent = '查询不到课程:联系站长添加:3200437464'; } }); courseResetButton.addEventListener('click', () => { courseSearchInput.value = ''; courseResult.textContent = ''; }); function searchCourse(query) { const validCourses = ['学习通', '智慧树', 'U校园','知道','智慧职教','U校园','U校园ai','U校园AI','青书学堂','柠檬','雨课堂','超星学习通','乐跑','学起Plus']; if (validCourses.includes(query)) { courseResult.textContent = `查询成功!正在获取 ${query} 的课程ID,请稍等...`; } else { courseResult.textContent = '未找到相关课程,请联系站长'; } } const optionsContainer = document.querySelector('.options-container'); let draggedItem = null; optionsContainer.addEventListener('dragstart', (e) => { draggedItem = e.target.closest('.sortable-item'); e.dataTransfer.effectAllowed = 'move'; e.dataTransfer.setData('text/html', draggedItem.outerHTML); }); optionsContainer.addEventListener('dragover', (e) => { e.preventDefault(); e.dataTransfer.dropEffect = 'move'; const targetItem = e.target.closest('.sortable-item'); if (targetItem && targetItem !== draggedItem) { const rect = targetItem.getBoundingClientRect(); const middleX = rect.left + rect.width / 2; if (e.clientX > middleX) { optionsContainer.insertBefore(draggedItem, targetItem.nextSibling); } else { optionsContainer.insertBefore(draggedItem, targetItem); } } }); optionsContainer.addEventListener('drop', (e) => { e.preventDefault(); }); const exampleSortButton = document.createElement('button'); exampleSortButton.textContent = '示例排序'; exampleSortButton.style.marginBottom = '10px'; /* 添加底部间距以便换行 */ exampleSortButton.addEventListener('click', () => { sortExampleFeatures(); }); document.querySelector('.options-container').parentNode.insertBefore(exampleSortButton, exampleSortButton.nextSibling); function sortExampleFeatures() { const items = Array.from(optionsContainer.children); items.sort((a, b) => { const aValue = a.querySelector('input[name="features"]').value; const bValue = b.querySelector('input[name="features"]').value; const order = ['chapter-fetch', 'quiz-settings']; // 示例排序顺序 return order.indexOf(aValue) - order.indexOf(bValue); }); items.forEach(item => optionsContainer.appendChild(item)); } const aiModelSelect = document.querySelector('.ai-model-select'); exampleSortButton.parentNode.insertBefore(aiModelSelect, exampleSortButton.nextSibling); const apiKeyInput = document.querySelector('.key-input'); aiModelSelect.parentNode.insertBefore(apiKeyInput, aiModelSelect.nextSibling); const sortableItems = document.querySelectorAll('.sortable-item'); sortableItems.forEach(item => { item.addEventListener('click', (e) => { if (e.target.tagName.toLowerCase() !== 'input') { const checkbox = item.querySelector('input[type="checkbox"]'); checkbox.checked = !checkbox.checked; } }); }); const playButton = document.getElementById('play-button'); playButton.addEventListener('click', () => { const resultMessage = document.getElementById('course-result'); resultMessage.textContent = '正在读取课程信息...'; setTimeout(() => { resultMessage.textContent = '读取失败,请检查配置...'; }, 1000); logMessage('正在读取课程信息...', 'info'); setTimeout(() => { logMessage('读取失败,请检查配置...', 'error'); }, 1000); }); const verifyButton = document.getElementById('verify-button'); verifyButton.addEventListener('click', () => { const apiKey = document.getElementById('api-key').value.trim(); if (apiKey) { showToast('请稍等,正在加载...'); logMessage('请稍等,正在加载...', 'info'); setTimeout(() => { showToast('加载失败'); logMessage('加载失败', 'error'); }, 60000); // 1分钟后显示加载失败的消息 } else { showToast('请输入API Key'); logMessage('请输入API Key', 'error'); } }); const pauseButton = document.getElementById('pause-button'); pauseButton.addEventListener('click', () => { showToast('已暂停答题'); logMessage('已暂停答题', 'success'); }); const restartButton = document.getElementById('restart-button'); restartButton.addEventListener('click', () => { showToast('正在重新播放...'); logMessage('正在重新播放...', 'info'); }); const importButton = document.getElementById('import-button'); importButton.addEventListener('click', () => { window.open('http://a.zhuxuelo.top/index/chaxun', '_blank'); logMessage('正在跳转到官方网...', 'info'); }); // 获取到的课程按钮逻辑 const getCoursesButton = document.getElementById('get-courses-button'); getCoursesButton.addEventListener('click', () => { const htmlContent = document.documentElement.outerHTML; console.log(htmlContent); showToast('加载当前页面课程,请查看控制台'); logMessage('加载到课程{ID},请选择课程', 'success'); }); const printLogButton = document.getElementById('print-log-button'); printLogButton.addEventListener('click', () => { const logContainer = document.getElementById('log-container'); logContainer.innerHTML = ''; // 清空日志容器 logMessage('操作日志已清空', 'info'); }); function logMessage(message, type) { const logContainer = document.getElementById('log-container'); const logEntry = document.createElement('div'); logEntry.className = `log-entry log-${type}`; logEntry.textContent = message; logContainer.appendChild(logEntry); } function showToast(message) { const toastElement = document.getElementById('toast'); toastElement.textContent = message; toastElement.style.display = 'block'; setTimeout(() => { toastElement.style.display = 'none'; }, 5000); // 3秒后隐藏 toast } window.copyToClipboard = function(text) { navigator.clipboard.writeText(text).then(() => { showToast(`${text} 已复制到剪贴板`); logMessage(`${text} 已复制到剪贴板`, 'success'); }).catch(err => { showToast(`复制失败: ${err}`); logMessage(`复制失败: ${err}`, 'error'); }); }; const style = document.createElement('style'); style.innerHTML = ` #custom-popup { position: fixed; top: 0; left: 0; width: 300px !important; height: 500px !important; background-color: rgba(255, 255, 255, 0.8); border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.3); z-index: 99999; font-family: Arial, sans-serif; display: flex; flex-direction: column; } #popup-header { padding: 5px 15px; background-color: #ffcccc; color: black; font-size: 14px; height: 40px; border-top-left-radius: 8px; border-top-right-radius: 8px; cursor: move; display: flex; justify-content: space-between; align-items: center; font-family: SimSun, serif; font-weight: bold; } #popup-avatar { width: 30px; height: 30px; border-radius: 50%; margin-right: 10px; } #popup-close { background: none; border: none; color: white; font-size: 16px; cursor: pointer; } #popup-nav { display: flex; background-color: #d3d3d3; } #popup-nav button { flex: 1; padding: 10px; border: none; background: none; cursor: pointer; font-weight: bold; font-size: 12px; color: #2f4f4f; outline: none; transition: outline 0.3s ease; } #popup-nav button:focus, #popup-nav button:hover { outline: 2px solid #2f4f4f; } #popup-nav button.active { background-color: #2f4f4f; color: white; outline: none; } #popup-content { flex: 1; padding: 10px; overflow-y: auto; display: flex; flex-direction: column; } .tab-content { display: none; } .tab-content.active { display: block; } #log-container { margin-top: 10px; max-height: 100px; overflow-y: auto; border-top: 1px solid #ccc; padding-top: 10px; } .search-bar { display: flex; margin-bottom: 10px; } .search-bar input { flex: 1; padding: 5px; border: 1px solid #ccc; border-radius: 4px; } .search-bar button { margin-left: 5px; padding: 5px 10px; border: none; background-color: #2f4f4f; color: white; border-radius: 4px; cursor: pointer; } .search-bar button:hover { background-color: #4a7c7c; } .result-message { margin-top: 10px; color: red; /* 设置结果消息为红色 */ } .options-container { margin-top: 10px; display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; } .options-container label { display: flex; align-items: center; } .options-container input[type="checkbox"] { margin-right: 5px; } .sortable-item { background-color: #f9f9f9; border: 1px solid #ddd; padding: 5px; cursor: grab; border-radius: 4px; transition: background-color 0.3s ease; } .sortable-item:active { cursor: grabbing; } .sortable-item:hover { background-color: #e0e0e0; } .ai-model-select { margin-top: 10px; } .ai-model-select select { width: 100%; padding: 5px; border: 1px solid #ccc; border-radius: 4px; } .bold-text { font-weight: bold; } .key-input { margin-top: 10px; display: flex; justify-content: space-between; align-items: center; } .key-input input { flex: 1; padding: 5px; border: 1px solid #ccc; border-radius: 4px; } .verify-button { margin-left: 10px; padding: 5px 10px; border: none; background-color: #2f4f4f; color: white; border-radius: 4px; cursor: pointer; } .verify-button:hover { background-color: #4a7c7c; } .play-button { margin-top: 10px; padding: 5px 10px; border: none; background-color: #2f4f4f; color: white; border-radius: 4px; cursor: pointer; } .play-button:hover { background-color: #4a7c7c; } #toast { position: fixed; bottom: 20px; right: 20px; background-color: rgba(255, 255, 255, 0.8); border: 1px solid #ccc; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.3); z-index: 100000; padding: 10px; text-align: center; color: red; display: none; } .action-buttons { display: flex; justify-content: space-between; flex-wrap: wrap; } .action-button { width: 100px; height: 35px; padding: 0; border: none; background-color: #2f4f4f; color: white; border-radius: 4px; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; margin-bottom: 10px; } .action-button:hover { background-color: #4a7c7c; } .import-button { background-color: red !important; } .import-button:hover { background-color: darkred !important; } .course-button { background-color: #4CAF50 !important; } .course-button:hover { background-color: #45a049 !important; } .log-entry { margin: 5px 0; } .log-info { color: blue; } .log-success { color: green; } .log-error { color: red; } .contact-info { margin-top: 20px; } .contact-info span { cursor: pointer; color: blue; text-decoration: underline; } .contact-info span:hover { text-decoration: none; } `; document.head.appendChild(style); })();