// ==UserScript== // @name 三三制-全自动答题交卷 // @namespace http://tampermonkey.net/ // @version 3.0 // @description 全自动完成所有题目并交卷(适配bxwxm考试系统) // @author Automation Expert // @match https://33.bxwxm.com.cn/index/exam/show/id/* // @grant none // ==/UserScript== (function() { 'use strict'; // 配置项 const CONFIG = { isPaused: false, // 暂停状态标志 apiKey: '', // 由用户输入API密钥 model: 'deepseek-chat', // 使用deepseek-chat模型 answerDelay: 1500, // 每题答题延迟(ms) nextDelay: 1000, // 下一题延迟(ms) submitDelay: 3000, // 交卷前延迟(ms) maxRetries: 3, // API调用最大重试次数 temperature: 0.3, // 控制回答随机性(0-1) smartMode: true // 启用智能答题策略 }; // 精准元素选择器 const SELECTORS = { question: 'ul.list-unstyled.question', activeQuestion: 'ul.list-unstyled.question[style*="display: block"]', option: 'input[type="radio"], input[type="checkbox"]', nextBtn: '#nextQuestion', submitBtn: '#submitQuestions', questionId: '.questionId:not(.active_question_id)' // 未答题的题号 }; // 主流程控制器 async function autoAnswerAll() { console.log('开始全自动答题流程...'); let answerCount = 0; // 循环处理每道题 while (true) { // 检查暂停状态 while (CONFIG.isPaused) { await delay(500); } const currentQuestion = document.querySelector(SELECTORS.activeQuestion); if (!currentQuestion) break; // 检查答题次数 answerCount++; if (answerCount >= 19) { CONFIG.isPaused = true; document.getElementById('pauseBtn').textContent = '▶ 继续'; document.getElementById('autoAnswerBtn').disabled = true; alert('答题结束,请检查后手动提交试卷'); return; } // 执行智能答题 await answerQuestion(currentQuestion); // 点击下一题或结束循环 if (!await goToNextQuestion()) { break; } } // 答题结束提示 alert('答题结束,请检查后手动提交试卷'); } // AI答题核心逻辑 async function answerQuestion(questionElement) { try { // 获取题目信息 const questionInfo = { title: questionElement.querySelector('.question_title')?.textContent || '', content: questionElement.querySelector('.question_content')?.textContent || '', type: getQuestionType(questionElement), options: Array.from(questionElement.querySelectorAll('li')).map(li => { const input = li.querySelector('input[type="radio"], input[type="checkbox"]'); return input ? { value: input.value, text: li.textContent.replace(input.value, '').trim() } : null; }).filter(Boolean) }; // 调用DeepSeek API const response = await fetch('https://api.deepseek.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${CONFIG.apiKey}` }, body: JSON.stringify({ model: CONFIG.model, messages: [ { role: "system", content: "你是一个专业的考试助手,需要准确回答考试题目。只返回选项字母,不要解释。" }, { role: "user", content: `这是一道${questionInfo.type}题:\n\n题目:${questionInfo.title}\n内容:${questionInfo.content}\n\n选项:\n${questionInfo.options.map(opt => `${opt.value}. ${opt.text}`).join('\n')}\n\n请只回答选项字母${questionInfo.type === 'multi' ? '(多选题请用逗号分隔多个选项,如"A,B,C")' : ''}` } ], temperature: CONFIG.temperature, max_tokens: 100 }) }); const data = await response.json(); const answer = data.choices?.[0]?.message?.content?.trim(); if (answer) { // 根据AI回答选择选项 const answers = answer.split(',').map(a => a.trim()); const options = questionElement.querySelectorAll(SELECTORS.option); answers.forEach(ans => { const option = Array.from(options).find(opt => opt.value === ans); if (option) { triggerClick(option); console.log(`AI选择: ${ans}`); } }); } else { throw new Error('AI未返回有效答案'); } } catch (error) { console.error('AI答题失败:', error); console.log('AI答题失败,请检查API密钥或网络连接'); // 禁用随机答题,直接暂停脚本 CONFIG.isPaused = true; document.getElementById('pauseBtn').textContent = '▶ 继续'; document.getElementById('autoAnswerBtn').disabled = true; alert('AI答题失败,已暂停脚本,请检查后刷新页面继续'); } await delay(CONFIG.answerDelay); } // 判断题策略(80%选B) function selectJudgeAnswer(options) { const shouldSelectB = Math.random() < 0.8; const option = shouldSelectB ? [...options].find(opt => opt.value === 'B') : [...options].find(opt => opt.value === 'A'); triggerClick(option); console.log(`判断题选择: ${option.value} (${shouldSelectB ? '推荐' : '随机'})`); } // 单选题策略(C>B>D>A优先级) function selectSingleAnswer(options) { const priority = ['C', 'B', 'D', 'A']; for (const value of priority) { const option = [...options].find(opt => opt.value === value); if (option) { triggerClick(option); console.log(`单选题选择: ${value}`); return; } } } // 多选题策略(选2-3个合理选项) function selectMultiAnswer(options) { const positiveOptions = [...options].filter(opt => { const text = opt.closest('li').textContent; return !text.includes('不') && !text.includes('限制'); }); const selectCount = Math.min( positiveOptions.length, Math.floor(Math.random() * 2) + 2 ); const selected = [...positiveOptions] .sort(() => 0.5 - Math.random()) .slice(0, selectCount); selected.forEach(opt => triggerClick(opt)); console.log(`多选题选择: ${selected.map(o => o.value).join(',')}`); } // 随机选择(保底策略) function selectRandomAnswer(options, questionType) { if (questionType === 'multi') { // 多选随机1-3个 const shuffled = [...options].sort(() => 0.5 - Math.random()); shuffled.slice(0, Math.floor(Math.random() * 3) + 1) .forEach(opt => triggerClick(opt)); } else { // 单选/判断随机1个 const randomOpt = options[Math.floor(Math.random() * options.length)]; triggerClick(randomOpt); } } // 判断题型 function getQuestionType(questionElement) { const title = questionElement.querySelector('.question_title').textContent; const questionId = questionElement.querySelector('.questionId')?.textContent; if (title.includes('判断')) return 'judge'; if (title.includes('多选')) return 'multi'; if (questionId && parseInt(questionId) === 19) return 'single'; // 第19题特殊处理 return 'single'; } // 跳转到下一题 async function goToNextQuestion() { const nextBtn = document.querySelector(SELECTORS.nextBtn); if (!nextBtn) return false; triggerClick(nextBtn); await delay(CONFIG.nextDelay); return true; } // 提交试卷 function submitExam() { const submitBtn = document.querySelector(SELECTORS.submitBtn); if (submitBtn) { console.log('正在自动交卷...'); triggerClick(submitBtn); } else { console.log('未找到交卷按钮!'); } } // 辅助函数:触发真实点击 function triggerClick(element) { if (!element) return; element.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); } // 辅助函数:延迟执行 function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // 添加控制按钮 function addControlButton() { if (document.getElementById('autoAnswerBtn')) return; // 添加暂停按钮 const pauseBtn = document.createElement('button'); pauseBtn.id = 'pauseBtn'; pauseBtn.textContent = '⏸ 暂停'; pauseBtn.style.cssText = ` position: fixed; bottom: 20px; right: 180px; z-index: 9999; padding: 12px 20px; background: linear-gradient(135deg, #4b6cb7, #182848); color: white; border: none; border-radius: 30px; font-weight: bold; font-size: 16px; cursor: pointer; box-shadow: 0 4px 15px rgba(75, 108, 183, 0.5); transition: all 0.3s; `; pauseBtn.onmouseover = () => pauseBtn.style.transform = 'scale(1.05)'; pauseBtn.onmouseout = () => pauseBtn.style.transform = 'scale(1)'; pauseBtn.onclick = () => { CONFIG.isPaused = !CONFIG.isPaused; pauseBtn.textContent = CONFIG.isPaused ? '▶ 继续' : '⏸ 暂停'; console.log(CONFIG.isPaused ? '已暂停' : '已继续'); }; document.body.appendChild(pauseBtn); const btn = document.createElement('button'); btn.id = 'autoAnswerBtn'; btn.textContent = '★ 全自动答题交卷 ★'; btn.style.cssText = ` position: fixed; bottom: 20px; right: 20px; z-index: 9999; padding: 12px 20px; background: linear-gradient(135deg, #ff5f6d, #ff9966); color: white; border: none; border-radius: 30px; font-weight: bold; font-size: 16px; cursor: pointer; box-shadow: 0 4px 15px rgba(255, 105, 100, 0.5); transition: all 0.3s; `; btn.onmouseover = () => btn.style.transform = 'scale(1.05)'; btn.onmouseout = () => btn.style.transform = 'scale(1)'; btn.onclick = autoAnswerAll; document.body.appendChild(btn); console.log('全自动按钮已添加'); } // 启动脚本 setTimeout(() => { const apiKey = prompt('请输入密钥,联系qq481306354:', ''); if (apiKey && apiKey.trim()) { CONFIG.apiKey = apiKey.trim(); addControlButton(); console.log('全自动答题脚本已加载,点击右下角按钮启动'); } else { alert('必须输入有效的密钥才能继续,联系qq481306354'); return; } }, 1500); })();