// ==UserScript== // @name 课程作业自动答题(从解析获取答案) // @namespace http://tampermonkey.net/ // @version 0.0.6 // @description 自动提取解析中的答案并勾选,并自动交卷(含确认弹窗) // @match https://*.jxjypt.cn/paper/start* // @grant none // @run-at document-end // ==/UserScript== (function() { 'use strict'; // 等待页面加载完成(确保jQuery可用) function waitForJQuery(callback) { if (window.jQuery) { callback(window.jQuery); } else { setTimeout(() => waitForJQuery(callback), 100); } } waitForJQuery(function($) { // 创建浮动控制面板 const panel = $(`
🤖 自动答题助手
`).appendTo('body'); // 日志输出 function log(msg) { $('#answerLog').prepend(`
${new Date().toLocaleTimeString()} - ${msg}
`); if ($('#answerLog div').length > 20) $('#answerLog div:last').remove(); } // 从解析区域获取答案字母 function getAnswerFromSolution($question) { const $solution = $question.find('.solution'); if (!$solution.length) return null; // 答案示例:C const answerText = $solution.find('.right').text().trim(); if (!answerText) return null; const match = answerText.match(/[A-D]/i); return match ? match[0].toUpperCase() : null; } // 自动答题主函数 function autoAnswer() { log('开始扫描题目...'); let successCount = 0; let failCount = 0; $('.m-question').each(function(index) { const $q = $(this); const questionText = $q.find('.sub-dotitle pre').text().trim(); const answerLetter = getAnswerFromSolution($q); if (!answerLetter) { log(`❌ 第${index+1}题 未找到答案(题目:${questionText.substring(0,20)}...)`); failCount++; return; } const $targetOption = $q.find(`dd[data-value="${answerLetter}"]`); if (!$targetOption.length) { log(`⚠️ 第${index+1}题 答案 ${answerLetter} 但无对应选项`); failCount++; return; } $targetOption.click(); $targetOption[0].dispatchEvent(new Event('click', { bubbles: true })); log(`✅ 第${index+1}题 已勾选答案 ${answerLetter}(${questionText.substring(0,30)})`); successCount++; }); log(`答题完成!成功 ${successCount} 题,失败 ${failCount} 题。`); return successCount; // 返回成功数量,用于判断是否全部答完 } // 自动交卷(含确定弹窗处理) function autoSubmit() { const $submitBtn = $('#btn_submit'); if (!$submitBtn.length) { log('❌ 未找到交卷按钮(#btn_submit)'); return; } log('正在交卷...'); $submitBtn.click(); $submitBtn[0].dispatchEvent(new Event('click', { bubbles: true })); // 监听确认弹窗并自动点击确定 let confirmClicked = false; const checkConfirm = setInterval(() => { // 常见的确认弹窗按钮选择器 const confirmBtn = $('.layui-layer-btn0:contains("确定"), .layui-layer-btn0:contains("确认"), .confirm-btn:contains("确定")'); if (confirmBtn.length && !confirmClicked) { confirmClicked = true; log('检测到确认弹窗,自动点击确定...'); confirmBtn.click(); clearInterval(checkConfirm); } }, 200); // 最多等待 5 秒,超时清除定时器 setTimeout(() => { clearInterval(checkConfirm); if (!confirmClicked) log('⚠️ 未检测到确认弹窗,可能已经提交或弹窗选择器不匹配'); }, 5000); } // 入口:自动完成所有步骤(答题 + 交卷) let autoExecuted = false; function runFullAuto() { if (autoExecuted) return; autoExecuted = true; log('🚀 自动模式启动...'); // 稍微延迟确保题目完全加载(尤其是动态加载的情况) setTimeout(() => { const successCount = autoAnswer(); // 无论答题成功几个,都尝试交卷(也可以设置只有全部答完才交卷,这里按需) setTimeout(() => { autoSubmit(); }, 1500); }, 1000); } // 绑定手动按钮事件 $('#startAnswerBtn').on('click', function() { autoAnswer(); }); $('#submitPaperBtn').on('click', function() { autoSubmit(); }); log('脚本已加载,将自动答题并交卷...'); // 页面加载完成后自动执行 runFullAuto(); }); })();