您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Xem điểm học phần Duy Tân & Giải Captcha & Tự động đánh giá & Giải Captcha Đăng Ký & Khai Báo Ngoại Trú
// ==UserScript== // @name DTUTOOL // @namespace https://mydtu.duytan.edu.vn/ // @version 0.6 // @description Xem điểm học phần Duy Tân & Giải Captcha & Tự động đánh giá & Giải Captcha Đăng Ký & Khai Báo Ngoại Trú // @author David Hua // @match *://mydtu.duytan.edu.vn/sites/index.aspx?p=home_grading_public_grade* // @match *://mydtu.duytan.edu.vn/Signin.aspx // @match *://mydtu.duytan.edu.vn/sites/index.aspx?p=home_ratingform* // @match *://mydtu.duytan.edu.vn/sites/index.aspx?p=home_registeredall* // @match *://khaibaongoaitru.duytan.edu.vn/KhaiBaoNgoaiTru/Index* // @match *://mydtu.duytan.edu.vn/sites/index.aspx?p=home_sar_studentaffairrating* // @grant GM_addStyle // @icon https://mydtu.duytan.edu.vn/images/DTU.ICO // ==/UserScript== (function() { 'use strict'; const css = ` #txtCaptcha.solving, #ctl00_PlaceHolderContentArea_ctl00_ctl01_txtCaptcha.solving, input.txt.txt-vn.solving, #captchaText.solving, #CodeNumberTextBox.solving { background-image: url("https://mydtu.duytan.edu.vn/images/ajax-loader1.gif") !important; background-position: right 5px center !important; background-repeat: no-repeat !important; background-size: 16px 16px !important; } `; const style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); let lastCaptchaUrl = ''; async function getCaptchaImageAsBlob(url) { const response = await fetch(url); if (!response.ok) return null; return await response.blob(); } async function getBase64FromImage(imgElement) { const canvas = document.createElement('canvas'); canvas.width = imgElement.naturalWidth; canvas.height = imgElement.naturalHeight; const ctx = canvas.getContext('2d'); ctx.drawImage(imgElement, 0, 0); return new Promise((resolve) => { canvas.toBlob((blob) => { resolve(blob); }, 'image/jpeg'); }); } async function getCaptchaImage() { if (window.location.href.includes('khaibaongoaitru.duytan.edu.vn')) { const imgElement = document.querySelector('.box_col_6.col_box img'); if (imgElement) { return await getBase64FromImage(imgElement); } return null; } else if (window.location.href.includes('home_sar_studentaffairrating')) { const imgElement = document.getElementById('captchaImg'); if (imgElement) { return await getBase64FromImage(imgElement); } return null; } const captchaUrl = getCaptchaUrl(); if (!captchaUrl) return null; if (captchaUrl !== lastCaptchaUrl) { lastCaptchaUrl = captchaUrl; return await getCaptchaImageAsBlob(captchaUrl); } return null; } function getCaptchaUrl() { let captchaImage = document.querySelector('#imgCapt'); if (captchaImage) { return captchaImage.src; } captchaImage = document.querySelector('.floatbox img'); if (captchaImage) { return captchaImage.src; } return null; } async function uploadCaptchaImage(blob, inputElement) { if (inputElement) { inputElement.classList.add('solving'); inputElement.value = ''; } try { const formData = new FormData(); formData.append('file', blob, 'captcha.jpg'); const response = await fetch('https://tpminer107.pythonanywhere.com/', { method: 'POST', body: formData }); if (!response.ok) { throw new Error("Upload CAPTCHA không thành công."); } const result = await response.json(); return result.result || result.error; } finally { if (inputElement) { inputElement.classList.remove('solving'); } } } async function handleCaptcha(inputId) { try { const captchaInput = document.getElementById(inputId); const captchaImageBlob = await getCaptchaImage(); if (!captchaImageBlob) { return; } const captchaResult = await uploadCaptchaImage(captchaImageBlob, captchaInput); if (!captchaResult) { return; } if (captchaInput) { captchaInput.value = captchaResult; } } catch (error) { } } // Override F5Captcha function if it exists if (typeof F5Captcha === 'function') { const originalF5Captcha = F5Captcha; F5Captcha = function() { originalF5Captcha.apply(this, arguments); setTimeout(() => { handleCaptcha('CodeNumberTextBox'); }, 500); }; } if (typeof LoadCaptcha === 'function') { const originalLoadCaptcha = LoadCaptcha; LoadCaptcha = function() { originalLoadCaptcha.apply(this, arguments); const captchaInputId = 'ctl00_PlaceHolderContentArea_ctl00_ctl01_txtCaptchar'; const captchaImageSelector = '#imgCapt'; const loadCheckInterval = setInterval(() => { const captchaImage = document.querySelector(captchaImageSelector); if (captchaImage && captchaImage.src) { clearInterval(loadCheckInterval); handleCaptcha(captchaInputId); } }, 500); }; } function checkOption(radioId) { const radio = document.getElementById(radioId); if (radio) { radio.checked = true; } } function autoFillRatingForm() { for (let i = 48; i <= 51; i++) { const element = document.getElementById("R" + i); if (element) { element.value += "Không có ý kiến"; } } for (let i = 0; i <= 47; i++) { checkOption("R" + i + "A"); } window.scrollTo(0, document.body.scrollHeight); handleCaptcha('ctl00_PlaceHolderContentArea_ctl00_ctl01_txtCaptcha'); } if (window.location.href.includes('home_sar_studentaffairrating')) { const sarCaptchaInterval = setInterval(() => { const captchaImage = document.getElementById('captchaImg'); if (captchaImage && captchaImage.complete) { clearInterval(sarCaptchaInterval); handleCaptcha('CodeNumberTextBox'); } }, 500); } else if (window.location.href.includes('khaibaongoaitru.duytan.edu.vn/KhaiBaoNgoaiTru/Index')) { const captchaCheckInterval = setInterval(() => { const captchaImage = document.querySelector('.box_col_6.col_box img'); if (captchaImage && captchaImage.complete) { clearInterval(captchaCheckInterval); handleCaptcha('captchaText'); } }, 500); } else if (window.location.href === 'https://mydtu.duytan.edu.vn/Signin.aspx') { handleCaptcha('txtCaptcha'); const loginButton = document.getElementById('btnLogin1'); if (loginButton) { loginButton.addEventListener('click', function() { const loginCheckInterval = setInterval(() => { const captchaImage = document.querySelector('.floatbox img'); if (captchaImage && captchaImage.src) { clearInterval(loginCheckInterval); handleCaptcha('txtCaptcha'); } }, 500); }); } document.addEventListener('keypress', function(event) { if (event.key === 'Enter') { const enterCheckInterval = setInterval(() => { const captchaImage = document.querySelector('.floatbox img'); if (captchaImage && captchaImage.src) { clearInterval(enterCheckInterval); handleCaptcha('txtCaptcha'); } }, 500); } }); } else if (window.location.href.includes('mydtu.duytan.edu.vn/sites/index.aspx?p=home_ratingform')) { autoFillRatingForm(); } else 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(); } else if (window.location.href.includes('mydtu.duytan.edu.vn/sites/index.aspx?p=home_registeredall')) { const captchaInputId = 'ctl00_PlaceHolderContentArea_ctl00_ctl01_txtCaptchar'; const captchaImageSelector = '#imgCapt'; const initialCheckInterval = setInterval(() => { const captchaImage = document.querySelector(captchaImageSelector); if (captchaImage && captchaImage.src) { clearInterval(initialCheckInterval); handleCaptcha(captchaInputId); } }, 500); } })();