// ==UserScript== // @name 芯位教育新界面自动下一集,自动答题 // @namespace https://github.com/poi-yee/51xinweiauto // @version 0.3.1 // @description 新版界面的芯位自动下一集也能自动刷作业(其他功能加上了,但是依托 // @author PoiYee,Code-dogcreatior // @match *://*.51xinwei.com/* // @icon *://*.51xinwei.com/* // @grant none // @run-at document-end // @license GPL License // @downloadURL none // ==/UserScript== (function() { 'use strict'; // 创建控制面板 var controlPanel = document.createElement('div'); controlPanel.innerHTML = `
`; document.body.appendChild(controlPanel); // 控制面板拖动功能 var isDragging = false; var offsetX, offsetY; var controlPanelElement = document.getElementById('controlPanel'); controlPanelElement.addEventListener('mousedown', function(event) { isDragging = true; offsetX = event.clientX - controlPanelElement.getBoundingClientRect().left; offsetY = event.clientY - controlPanelElement.getBoundingClientRect().top; }); document.addEventListener('mousemove', function(event) { if (isDragging) { var x = event.clientX - offsetX; var y = event.clientY - offsetY; controlPanelElement.style.left = x + 'px'; controlPanelElement.style.top = y + 'px'; } }); document.addEventListener('mouseup', function() { isDragging = false; }); // 控制面板默认显示在网页的右下角 window.addEventListener('load', function() { var windowHeight = window.innerHeight; var windowWidth = window.innerWidth; controlPanelElement.style.left = windowWidth - controlPanelElement.offsetWidth - 20 + 'px'; controlPanelElement.style.top = windowHeight - controlPanelElement.offsetHeight - 20 + 'px'; }); // 创建全屏覆盖的页面 var aboutPage = document.createElement('div'); aboutPage.id = 'aboutPage'; aboutPage.style.cssText = 'display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 2000;'; aboutPage.innerHTML = `

Pay ————— ¥6.6

我的收款码

有BUG?来Github或GreasyFork反馈罢

Github GreasyFork

无人看守的诚信小卖铺

自动下一集和自动静音是免费的

自动答题¥6.6/人永久使用,答题正确率理论有99.99%

自动答题开关开启后建议刷新一次网页再使用,在答题界面稍作等待将自动开始

————————————————————

采取诚信授权模式,灵感来源Salt Player

理论上是可以直接使用的,付费再使用是诚信的表现

☆*:.o.O(≥▽⁠≤)O.o.:*⁠☆⁠

请注意,自动答题有概率出现选择错误的情况,请认真核对后再提交答案

请仔细考虑并认真阅读以上文字后再付款🍨

`; document.body.appendChild(aboutPage); // 倒计时函数 var countdownInterval; function startCountdown() { clearInterval(countdownInterval); // 清除之前的定时器 var timeLeft = 20; var countdownElement = document.getElementById('countdown'); var agreeCheckbox = document.getElementById('agreeCheckbox'); countdownInterval = setInterval(function() { if (timeLeft <= 0) { clearInterval(countdownInterval); countdownElement.innerHTML = ''; agreeCheckbox.disabled = false; document.getElementById('closeAboutPageButton').disabled = false; } else { countdownElement.innerHTML = '倒计时: ' + timeLeft + ' 秒'; timeLeft--; } }, 1000); } // 关于按钮点击事件 var aboutButton = document.getElementById('aboutButton'); aboutButton.addEventListener('click', function() { document.getElementById('aboutPage').style.display = 'block'; startCountdown(); // 开始倒计时 }); // 关闭关于页面按钮点击事件 var closeAboutPageButton = document.getElementById('closeAboutPageButton'); closeAboutPageButton.addEventListener('click', function() { document.getElementById('aboutPage').style.display = 'none'; clearInterval(countdownInterval); // 清除倒计时 var agreeCheckbox = document.getElementById('agreeCheckbox'); // 获取“我已同意以上条款并已诚信付款”复选框元素 var autoAnswerSwitch = document.getElementById('autoAnswerSwitch'); // 获取“自动答题”复选框元素 localStorage.setItem('agreedTerms', agreeCheckbox.checked); // 存储按钮状态 // 启用或禁用“自动答题”按钮 autoAnswerSwitch.disabled = !agreeCheckbox.checked; // 如果用户同意条款并启用了自动答题功能,则存储其状态 if (agreeCheckbox.checked) { autoAnswerEnabled = autoAnswerSwitch.checked; localStorage.setItem('autoAnswerEnabled', autoAnswerEnabled); } else { // 如果用户取消同意条款,则同时取消勾选自动答题按钮 autoAnswerSwitch.checked = false; localStorage.setItem('autoAnswerEnabled', false); } }); // 检查本地存储中的状态并更新按钮状态 var agreeCheckbox = document.getElementById('agreeCheckbox'); var autoAnswerSwitch = document.getElementById('autoAnswerSwitch'); if (localStorage.getItem('agreedTerms') === 'true') { agreeCheckbox.checked = true; autoAnswerSwitch.disabled = false; // 如果已同意条款,启用“自动答题”按钮 // 如果用户已同意条款并启用了自动答题功能,则更新自动答题按钮状态 if (localStorage.getItem('autoAnswerEnabled') === 'true') { autoAnswerSwitch.checked = true; } } else { startCountdown(); // 开始倒计时 autoAnswerSwitch.disabled = true; // 如果未同意条款,禁用“自动答题”按钮 } // 恢复开关状态 var autoClickAndMoveEnabled = localStorage.getItem('autoClickAndMoveEnabled') === 'true'; var autoMuteEnabled = localStorage.getItem('autoMuteEnabled') === 'true'; var autoAnswerEnabled = localStorage.getItem('autoAnswerEnabled') === 'true'; document.getElementById('autoClickAndMoveSwitch').checked = autoClickAndMoveEnabled; document.getElementById('autoMuteSwitch').checked = autoMuteEnabled; document.getElementById('autoAnswerSwitch').checked = autoAnswerEnabled; // 监听开关变化并保存状态 document.getElementById('autoClickAndMoveSwitch').addEventListener('change', function() { autoClickAndMoveEnabled = this.checked; localStorage.setItem('autoClickAndMoveEnabled', autoClickAndMoveEnabled); }); document.getElementById('autoMuteSwitch').addEventListener('change', function() { autoMuteEnabled = this.checked; localStorage.setItem('autoMuteEnabled', autoMuteEnabled); }); document.getElementById('autoAnswerSwitch').addEventListener('change', function() { autoAnswerEnabled = this.checked; localStorage.setItem('autoAnswerEnabled', autoAnswerEnabled); }); // 检查当前网页URL是否匹配 if (!/^https:\/\/www\.51xinwei\.com\/student\/#\/courseInfo\//.test(window.location.href)) { console.log('脚本已停止,当前网页不匹配指定的URL。'); return; } // 自动下一集并模拟鼠标移动 function autoClickAndMove() { if (!autoClickAndMoveEnabled) return; var nextChapterButton = document.querySelector('.button-box > .left'); if (nextChapterButton) { nextChapterButton.click(); console.log('Next chapter button clicked.'); } // 模拟鼠标移动 } // 每分钟执行一次点击和模拟鼠标移动 setInterval(autoClickAndMove, 60000); // 60秒 * 1000 毫秒 // 使用 MutationObserver 监听 DOM 变化,以备不时之需 var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.addedNodes && mutation.addedNodes.length > 0) { // element added to DOM autoClickAndMove(); // 检查是否有视频元素 var videoElement = document.querySelector('video'); if (videoElement && autoMuteEnabled) { // 检查静音按钮的标题是否为 "静音" var muteButton = document.querySelector('.vjs-mute-control'); if (muteButton && muteButton.getAttribute('title') === '静音') { // 如果静音按钮的标题为 "静音",则点击它 muteButton.click(); console.log('Video muted.'); } } } }); }); var config = { childList: true, subtree: true }; observer.observe(document.body, config); // 单选题和判断题的按钮JS路径 var singleChoiceButtonSelectors = { 'A': "label:nth-child(1) > span.el-radio__input > span", 'B': "label:nth-child(2) > span.el-radio__input > span", 'C': "label:nth-child(3) > span.el-radio__input > span", 'D': "label:nth-child(4) > span.el-radio__input > span", 'T': "label:nth-child(1) > span.el-radio__input > span", 'F': "label:nth-child(2) > span.el-radio__input > span" }; // 多选题的按钮JS路径 var multipleChoiceButtonSelectors = { 'A': "label:nth-child(1) > span.el-checkbox__input > span", 'B': "label:nth-child(2) > span.el-checkbox__input > span", 'C': "label:nth-child(3) > span.el-checkbox__input > span", 'D': "label:nth-child(4) > span.el-checkbox__input > span", 'E': "label:nth-child(5) > span.el-checkbox__input > span", 'F': "label:nth-child(6) > span.el-checkbox__input > span", 'G': "label:nth-child(7) > span.el-checkbox__input > span" }; // 下一题按钮的JS路径 var nextButtonSelector = "#app > section > main > div > div > div.loading-container > div.content-area > div.content > div.toggle-box > button:nth-child(2)"; // 延迟函数 function delay(duration) { return new Promise(resolve => setTimeout(resolve, duration)); } // 模拟点击函数 async function simulateClick(selector) { await delay(1000); // 延迟1秒 var button = document.querySelector(selector); if (button) { button.click(); console.log('Clicked:', selector); } else { console.log('Button not found for selector:', selector); } } // 自动答题主处理函数 async function processHomework(homeworkData) { if (!autoAnswerEnabled) return; await delay(5000); // 开始答题前延迟5秒 for (const topic of homeworkData.homeworkTopicList) { var buttonSelectors = topic.topicType === 'duoxuan' ? multipleChoiceButtonSelectors : singleChoiceButtonSelectors; var correctAnswers = topic.topicQuestionCoreDtoList.filter(q => q.isAnswer); for (const answer of correctAnswers) { var buttonSelector = buttonSelectors[answer.index]; if (buttonSelector) { await simulateClick(buttonSelector); } } // 点击下一题按钮 await simulateClick(nextButtonSelector); } // 自动答题完成后弹出提示框 alert('自动答题已完成!请务必核对答案是否全部填入且答案是否合理!'); } // 监听XHR请求 window.addEventListener('load', function() { console.log('Script loaded successfully.'); var open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function() { console.log('XHR open event triggered.'); this.addEventListener('load', async function() { console.log('XHR load event triggered.'); if (this.responseURL && this.responseURL.includes('/api/learning-service/admin/studentLearning/getHomeworkPaperDetail/')) { console.log('XHR URL matched:', this.responseURL); var responseData = JSON.parse(this.responseText); if (responseData && responseData.code === 200 && responseData.data) { console.log('XHR 响应数据:', responseData.data); await processHomework(responseData.data); } else { console.log('XHR response data is invalid or incomplete.'); } } else { console.log('XHR URL did not match the required pattern.'); } }); open.apply(this, arguments); }; }); })();