Auto Survey UIT

Tự động đánh giá môn học UIT (LimeSurvey)

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Auto Survey UIT
// @namespace    http://tampermonkey.net/
// @version      1.0
 // @license MIT
// @description  Tự động đánh giá môn học UIT (LimeSurvey)
// @author       NaruZeno
// @match        *://survey.uit.edu.vn/*
// @grant        window.close
// ==/UserScript==

(function() {
    'use strict';

    // Đặt độ trễ 1 giây (1000ms) để đảm bảo trang và các script mặc định đã load xong
    setTimeout(function() {

        // Xác định xem có nút Next hay Submit trên trang không
        let nextBtn = document.getElementById('movenextbtn');
        let submitBtn = document.getElementById('movesubmitbtn');
        let groupNameEl = document.querySelector('.group-name');
        // KIỂM TRA TRANG HOÀN THÀNH
        // Nếu trang không có nút Tiếp theo, không có nút Gửi, và không có tiêu đề nhóm câu hỏi
        // -> Rất có thể đây là trang thông báo hoàn thành khảo sát
        if (!nextBtn && !submitBtn && !groupNameEl) {
            console.log('Đã hoàn thành khảo sát. Tự động đóng tab sau 2 giây...');
            setTimeout(() => {
                window.close(); // Đóng tab
            }, 1000); // Delay 2s để bạn kịp nhìn thấy thông báo thành công (có thể chỉnh xuống 0 nếu muốn đóng ngay)
            return;
        }
        // BƯỚC 1, 2, 3: Trang Welcome / Không có nhóm câu hỏi -> Chỉ ấn Next
        if (!groupNameEl) {
            if (nextBtn) {
                console.log('Đang ở trang chào mừng, tự động ấn Tiếp theo...');
                nextBtn.click();
            }
            return;
        }

        let groupName = groupNameEl.innerText.trim();

        // BƯỚC 4: Trang "THÔNG TIN CHUNG"
        if (groupName === 'THÔNG TIN CHUNG') {
            console.log('Đang ở bước 4: Chọn >80% và Trên 90%');

            // Tìm và click vào các label chứa text tương ứng
            let labels = document.querySelectorAll('label.answertext');
            labels.forEach(label => {
                if (label.innerText.includes('>80%') || label.innerText.includes('Trên 90%')) {
                    let inputId = label.getAttribute('for');
                    let input = document.getElementById(inputId);
                    if (input && !input.checked) {
                        input.click(); // Click để kích hoạt sự kiện checkconditions của LimeSurvey
                    }
                }
            });

            // Chờ 0.5s rồi ấn Tiếp theo
            if (nextBtn) setTimeout(() => nextBtn.click(), 500);
        }

        // BƯỚC 5: Trang "ĐÁNH GIÁ VỀ HOẠT ĐỘNG GIẢNG DẠY"
      else if (groupName === 'ĐÁNH GIÁ VỀ HOẠT ĐỘNG GIẢNG DẠY') {
            console.log('Đang ở bước 5: Random giữa mức 3 và 4');

            // Lấy từng hàng câu hỏi
            let rows = document.querySelectorAll('tr.answers-list');
            rows.forEach(row => {
                // Lọc ra các lựa chọn có title là "3" hoặc "4" trong hàng đó
                // Nếu form có 5 mức, bạn đổi "3", "4" thành "4", "5" ở dòng dưới
                let options = row.querySelectorAll('input[type="radio"][title="3"], input[type="radio"][title="4"]');

                if (options.length > 0) {
                    // Random 1 số nguyên từ 0 đến (số lượng option - 1)
                    let randomIndex = Math.floor(Math.random() * options.length);
                    let selectedOption = options[randomIndex];

                    if (!selectedOption.checked) {
                        selectedOption.click();
                    }
                }
            });

            if (nextBtn) setTimeout(() => nextBtn.click(), 500);
        }
        // BƯỚC 6: Trang "Ý KIẾN KHÁC"
        else if (groupName === 'Ý KIẾN KHÁC') {
            console.log('Đang ở bước 6: Tự động ấn Gửi');

            // Nếu có nút Gửi, tiến hành submit
            if (submitBtn) {
                setTimeout(() => submitBtn.click(), 500);
            }
        }

    }, 1000);
})();