郑州大学评教系统自动化js
2026-07-01
(function() {
let currentCount = 0;
const TOTAL_RUNS = 10; // 目标循环次数
function runAutoEvaluate() {
currentCount++;
console.log(`%c🔄 开始第 ${currentCount} / ${TOTAL_RUNS} 次自动评价...`, 'color: #1890ff; font-weight: bold;');
let approveCount = 0;
let helpCount = 0;
let tagCount = 0;
// --- 1. 选中所有“非常同意” ---
const radioItems = document.querySelectorAll('.index__richTextContent--sIniP');
radioItems.forEach(item => {
const text = item.innerText.trim();
if (text === '非常同意') {
const label = item.closest('label');
if (label && !label.classList.contains('ant-radio-wrapper-checked')) {
label.click();
approveCount++;
}
}
});
// --- 2. 选中所有“帮助非常大” ---
const allTextContainers = document.querySelectorAll('.index__richTextContent--sIniP, .index__richTextContentEvaluateAnswerUEdito--CdE9p, label span');
allTextContainers.forEach(item => {
if (item.innerText.trim() === '帮助非常大') {
const label = item.closest('label');
if (label && !label.classList.contains('ant-radio-wrapper-checked')) {
label.click();
helpCount++;
}
}
});
// --- 3. 选中指定的三个评价标签 ---
const targetTags = ['融入前沿知识', '教学方法多样', '师生互动良好'];
const tags = document.querySelectorAll('.index__card_item--tn687');
tags.forEach(tag => {
const text = tag.innerText.trim();
if (targetTags.includes(text)) {
if (tag.style.backgroundColor !== 'rgb(42, 196, 121)') {
tag.click();
tagCount++;
}
}
});
// --- 4. 模拟真人填写评语 ---
function simulateHumanInput(textarea, value) {
if (!textarea) return;
textarea.focus();
const nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
nativeSetter.call(textarea, value + " ");
textarea.dispatchEvent(new Event('input', { bubbles: true }));
textarea.dispatchEvent(new Event('change', { bubbles: true }));
const spaceEventInit = { key: ' ', code: 'Space', keyCode: 32, which: 32, bubbles: true };
textarea.dispatchEvent(new KeyboardEvent('keydown', spaceEventInit));
textarea.dispatchEvent(new KeyboardEvent('keypress', spaceEventInit));
textarea.dispatchEvent(new KeyboardEvent('keyup', spaceEventInit));
textarea.blur();
}
let inputFilled = false;
const commentText = "老师授课认真负责,讲解清晰透彻,互动氛围轻松愉快,收获很大,非常满意!";
const titles = document.querySelectorAll('.index__richTextContentEvaluateAnswerUEdito--CdE9p');
titles.forEach(title => {
if (title.innerText.includes('对该课程或老师的建议是') || title.innerText.includes('我对本门课程或老师的建议是')) {
const subjectItem = title.closest('.index__subjectItem--XWS1b');
if (subjectItem) {
const textarea = subjectItem.querySelector('textarea');
if (textarea) {
simulateHumanInput(textarea, commentText);
inputFilled = true;
}
}
}
});
if (!inputFilled) {
document.querySelectorAll('textarea').forEach(tx => simulateHumanInput(tx, commentText));
}
// --- 5. 延时 0.5 秒自动点击提交按钮 ---
setTimeout(() => {
const submitBtn = document.querySelector('.index__submit--jiKIA.ant-btn-primary');
if (submitBtn) {
submitBtn.click();
console.log('🚀 提交当前评价成功,等待弹窗弹出...');
// --- 6. 提交成功后,等待 1.5 秒自动点击“进入下一门” ---
setTimeout(() => {
const nextBtnSelector = 'body > div:nth-child(17) > div > div.ant-modal-wrap > div > div.ant-modal-content > div > div > div > button.ant-btn.ant-btn-primary';
let nextBtn = document.querySelector(nextBtnSelector) || document.querySelector('.ant-modal-content .ant-btn-primary');
if (nextBtn) {
nextBtn.click();
console.log('⏭️ 已点击前往下一门课程。');
// --- 7. 判断是否继续循环 ---
if (currentCount < TOTAL_RUNS) {
// 等待 2.5 秒给新页面充足的加载时间,然后开启下一次填充
console.log('⏳ 等待新课网页加载中...');
setTimeout(runAutoEvaluate, 2500);
} else {
console.log('%c🎉 恭喜!10次自动循环评价已全部安全跑完!', 'color: #52c41a; font-weight: bold; font-size: 14px;');
}
} else {
console.error('❌ 未找到下一门的弹窗确认按钮,自动循环中断。请检查是否已到最后一门课,或手动点击一次。');
}
}, 1500); // 留出 1.5 秒等待提交请求完成并弹出对话框
} else {
console.error('❌ 未找到提交按钮,自动循环中断。');
}
}, 500);
}
// 启动第一次评价
runAutoEvaluate();
})();