DTUTOOL

Xem điểm học phần Duy Tân & Giải Captcha

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Advertisement:

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

Advertisement:

// ==UserScript==
// @name         DTUTOOL
// @namespace    https://mydtu.duytan.edu.vn/
// @version      0.1
// @description  Xem điểm học phần Duy Tân & Giải Captcha
// @author       David Hua
// @match        *://mydtu.duytan.edu.vn/sites/index.aspx?p=home_grading_public_grade*
// @match        *://mydtu.duytan.edu.vn/Signin.aspx
// @grant        none
// @icon         https://mydtu.duytan.edu.vn/images/DTU.ICO
// ==/UserScript==

(function() {
    'use strict';

    let lastCaptchaUrl = ''; // Biến lưu trữ URL CAPTCHA cuối cùng

    function getCaptchaUrl() {
        const captchaImage = document.querySelector('.floatbox img');
        if (captchaImage) {
            console.log("Captcha URL:", captchaImage.src);  // Kiểm tra URL ảnh CAPTCHA
            return captchaImage.src;
        } else {
            console.error("Không tìm thấy ảnh CAPTCHA.");
            return null;
        }
    }

    async function getCaptchaImage() {
        const captchaUrl = getCaptchaUrl();
        if (!captchaUrl) return null;

        // Đợi 2 giây trước khi kiểm tra URL CAPTCHA
        await new Promise(resolve => setTimeout(resolve, 2000));

        // Kiểm tra nếu URL CAPTCHA đã thay đổi
        if (captchaUrl !== lastCaptchaUrl) {
            lastCaptchaUrl = captchaUrl; // Cập nhật URL CAPTCHA
            const response = await fetch(captchaUrl);
            if (!response.ok) {
                console.error("Không thể tải ảnh CAPTCHA:", response.statusText);
                return null;
            }

            const blob = await response.blob();
            console.log("CAPTCHA Blob Size:", blob.size);  // Log kích thước ảnh CAPTCHA

            return blob; // Trả về blob để gửi đi
        }

        console.log("URL CAPTCHA không thay đổi.");
        return null; // Không làm gì nếu URL không thay đổi
    }

    async function uploadCaptchaImage(blob) {
        const formData = new FormData();
        formData.append('file', blob, 'captcha.jpg'); // Gửi blob dưới dạng file

        const response = await fetch('https://tpminer107.pythonanywhere.com/', {
            method: 'POST',
            body: formData
        });

        if (!response.ok) {
            console.error("Upload response error:", response.statusText);
            throw new Error("Upload CAPTCHA không thành công.");
        }

        const result = await response.json();
        console.log("Upload response:", result);  // Log phản hồi từ API upload
        return result.result || result.error;  // Trả về kết quả
    }

    async function handleCaptcha() {
        try {
            const captchaImageBlob = await getCaptchaImage();
            if (!captchaImageBlob) {
                console.error('Không thể lấy ảnh CAPTCHA.');
                return;
            }

            const captchaResult = await uploadCaptchaImage(captchaImageBlob);
            if (!captchaResult) {
                console.error('Giải CAPTCHA không thành công.');
                return;
            }

            console.log('Kết quả CAPTCHA:', captchaResult);

            // Tự động điền kết quả CAPTCHA vào ô nhập
            const captchaInput = document.getElementById('txtCaptcha');
            if (captchaInput) {
                captchaInput.value = captchaResult;  // Điền kết quả CAPTCHA vào ô
            }
        } catch (error) {
            console.error('Có lỗi xảy ra:', error);
        }
    }

    // Gọi hàm để giải CAPTCHA lần đầu tiên
    if (window.location.href === 'https://mydtu.duytan.edu.vn/Signin.aspx') {
        handleCaptcha();

        // Thêm sự kiện cho nút btnLogin1
        const loginButton = document.getElementById('btnLogin1');
        if (loginButton) {
            loginButton.addEventListener('click', function() {
                setTimeout(handleCaptcha, 2000); // Đợi 2 giây rồi gọi handleCaptcha
            });
        }

        // Thêm sự kiện cho phím Enter
        document.addEventListener('keypress', function(event) {
            if (event.key === 'Enter') {
                setTimeout(handleCaptcha, 2000); // Đợi 2 giây rồi gọi handleCaptcha
            }
        });
    }

    if (window.location.href.includes('mydtu.duytan.edu.vn/sites/index.aspx?p=home_grading_public_grade')) {

        const csvUrl = 'https://docs.google.com/spreadsheets/d/1RL30B0GkoiJcSYeABZCtUvIoWduxegF0/export?format=csv';

        async function fetchCsvData(url) {
            const response = await fetch(url);
            const text = await response.text();
            return text.split('\n').map(row => row.split(','));
        }

        async function updateTable() {
            const csvData = await fetchCsvData(csvUrl);
            const dataMap = {};

            csvData.forEach(row => {
                const [key, value] = row;
                dataMap[key.trim()] = value.trim();
            });

            const table = document.getElementById('frmNhapDiem');
            if (!table) return;

            const rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');

            for (let row of rows) {
                const cells = row.getElementsByTagName('td');
                if (cells.length > 2) {
                    const id = cells[1].innerText.trim();
                    if (dataMap[id]) {
                        cells[2].innerText = dataMap[id];
                    }
                }
            }
        }

        updateTable();
    }
})();