// ==UserScript== // @name 自动填充评价数据(优化版) // @namespace http://tampermonkey.net/ // @version 1.5 // @description 自动填充分数和主观评语,处理警告弹窗,适用于测试网站。 // @author Your Name // @match http://172.16.4.9/jwglxt/xspjgl/xspj_cxXspjIndex.html?doType=details&gnmkdm=N401605&layout=default* // @grant none // @run-at document-idle // ==/UserScript== (function() { 'use strict'; // 生成随机评语(第一人称,积极正面) function getRandomComment() { const comments = [ "我觉得教学内容非常丰富,讲解清晰明了。", "课堂氛围很好,我很享受每一节课。", "老师的教学方法多样,激发了我的学习兴趣。", "老师与学生互动频繁,课堂效果非常好。", "教学进度合理,知识点覆盖全面。", "课堂管理得当,学习环境非常好。", "老师态度认真,备课充分,让我受益匪浅。", "案例分析非常实用,帮助我更好地理解课程内容。", "课堂讨论环节让我有更多机会表达自己的观点。", "教学内容贴近实际,易于理解和掌握。" ]; return comments[Math.floor(Math.random() * comments.length)]; } // 创建悬浮窗 function createFloatingPanel() { const panel = document.createElement('div'); panel.id = 'auto-fill-evaluate-panel'; panel.style.position = 'fixed'; panel.style.top = '20px'; panel.style.right = '20px'; panel.style.width = '250px'; panel.style.padding = '15px'; panel.style.backgroundColor = '#f9f9f9'; panel.style.border = '1px solid #ccc'; panel.style.borderRadius = '8px'; panel.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)'; panel.style.zIndex = '10000'; panel.style.fontFamily = 'Arial, sans-serif'; panel.style.fontSize = '14px'; panel.innerHTML = `

自动填充工具

`; document.body.appendChild(panel); // 关闭按钮功能 document.getElementById('close-panel').addEventListener('click', () => { panel.style.display = 'none'; }); // 填充数据按钮功能 document.getElementById('fill-data').addEventListener('click', () => { const scoreInput = document.getElementById('score-input'); const score = parseInt(scoreInput.value); if (isNaN(score) || score < 1 || score > 95) { alert("分数必须是1到95之间的数字。"); return; } fillData(score); }); } // 更新状态信息 function updateStatus(message) { const status = document.getElementById('status'); status.textContent = message; } // 自动关闭警告弹窗 function handleWarningModal() { const modalSelector = '.modal-dialog.modal-dialog-reset.ui-draggable'; const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes.length > 0) { mutation.addedNodes.forEach((node) => { if (node.matches && node.matches(modalSelector)) { console.log("检测到警告弹窗,正在关闭..."); const confirmButton = node.querySelector('#btn_ok'); if (confirmButton) { confirmButton.click(); console.log("已关闭警告弹窗。"); updateStatus("已自动关闭警告弹窗。"); } } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } // 填充分数和评语 function fillData(score) { updateStatus('开始填充数据...'); // 填充分数 const scoreInputs = document.querySelectorAll('.input-pjf'); if (scoreInputs.length === 0) { console.warn("未找到分数输入框。"); updateStatus('警告: 未找到分数输入框。'); } else { scoreInputs.forEach((input, index) => { const min = parseInt(input.getAttribute('data-zxfz')) || 1; const max = parseInt(input.getAttribute('data-zdfz')) || 95; const finalScore = Math.min(Math.max(score, min), max); input.value = finalScore; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件 console.log(`已填充分数 [${index + 1}]: ${finalScore}`); }); } // 填充“主要优缺点”和“教学建议”下的评语 const commentTextareas = document.querySelectorAll('.input-zgpj'); if (commentTextareas.length === 0) { console.warn("未找到评语输入框。"); updateStatus('警告: 未找到评语输入框。'); } else { commentTextareas.forEach((textarea, index) => { const randomComment = getRandomComment(); textarea.value = randomComment; textarea.dispatchEvent(new Event('input', { bubbles: true })); textarea.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件 console.log(`已填充评语 [${index + 1}]: ${randomComment}`); }); } // 填充“评语”区域下的主观评语 const mainComment = document.querySelector('#pyDiv textarea[name="py"]'); if (mainComment) { const randomMainComment = getRandomComment(); mainComment.value = randomMainComment; mainComment.dispatchEvent(new Event('input', { bubbles: true })); mainComment.dispatchEvent(new Event('change', { bubbles: true })); // 触发change事件 console.log(`已填充分数: ${randomMainComment}`); } else { console.warn("未找到主观评语输入框。"); updateStatus('警告: 未找到主观评语输入框。'); } updateStatus('数据填充完成。'); } // 初始化脚本 function init() { createFloatingPanel(); handleWarningModal(); } // 确保脚本在页面完全加载后运行 if (document.readyState === 'complete' || document.readyState === 'interactive') { setTimeout(init, 1000); // 延迟1秒,确保页面元素加载完成 } else { document.addEventListener('DOMContentLoaded', () => { setTimeout(init, 1000); // 延迟1秒,确保页面元素加载完成 }); } })();