郑州大学评教系统自动化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();
})();