您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Abre encuestas y selecciona automáticamente la primera opción. Espera la acción del usuario para terminar/salir y abre la encuesta siguiente.
// ==UserScript== // @name Script de Encuestas Automaticas de la Evaluacion Docente UAN 2025 // @namespace https://github.com/HectorUwO // @version 1.0.1 // Incremento de versión por cambio de metadatos // @description Abre encuestas y selecciona automáticamente la primera opción. Espera la acción del usuario para terminar/salir y abre la encuesta siguiente. // @author HectorUwO // @match https://alumnos.piida.uan.mx/evaluacion-docente/unidades* // @grant none // @run-at document-idle // ==/UserScript== (function () { 'use strict'; const delay = ms => new Promise(res => setTimeout(res, ms)); async function esperarElemento(selector, timeout = 10000, raiz = document) { const inicio = Date.now(); while (Date.now() - inicio < timeout) { const elemento = raiz.querySelector(selector); if (elemento) { await delay(150); return elemento; } await delay(200); } console.warn(`[Script] Elemento no encontrado después de ${timeout}ms: ${selector}`); return null; } async function esperarQueElementoDesaparezca(selector, timeout = 15000, raiz = document) { const inicio = Date.now(); while (Date.now() - inicio < timeout) { if (!raiz.querySelector(selector)) { await delay(200); return true; } await delay(500); } console.warn(`[Script] Elemento ${selector} todavía presente después de ${timeout}ms. (Esperando acción del usuario)`); return false; } async function responderEncuestas() { console.log("[Script] Iniciando proceso de respuesta de encuestas..."); const filas = document.querySelectorAll('tr.el-table__row'); if (filas.length === 0) { console.log("[Script] No se encontraron filas de encuestas."); return; } console.log(`[Script] Se encontraron ${filas.length} filas de encuestas.`); for (const [index, fila] of filas.entries()) { console.log(`\n[Script] Procesando fila ${index + 1}/${filas.length}...`); const celdaCol4 = fila.querySelector('td.el-table_1_column_4'); if (!celdaCol4) { console.warn("[Script] No se encontró la celda 'el-table_1_column_4' en la fila:", fila); continue; } const enlace = celdaCol4.querySelector('a'); if (!enlace) { console.warn("[Script] No se encontró el enlace (<a>) en la celda:", celdaCol4); continue; } enlace.click(); console.log("[Script] Enlace clickeado, esperando modal..."); const modalActivoSelector = 'div.modal.show[role="dialog"]'; const modalActivo = await esperarElemento(modalActivoSelector); if (!modalActivo) { console.warn("[Script] Modal no encontrado o no apareció a tiempo. Saltando a la siguiente."); const botonCerrarFallback = document.querySelector('.modal.show button.close, .modal.show [data-dismiss="modal"]'); if (botonCerrarFallback) botonCerrarFallback.click(); await esperarQueElementoDesaparezca(modalActivoSelector, 5000); continue; } console.log("[Script] Modal detectado."); const cuerpoDelModal = modalActivo.querySelector('.modal-body'); if (!cuerpoDelModal) { console.warn("[Script] Cuerpo del modal (.modal-body) no encontrado dentro del modal activo. Saltando a la siguiente."); const botonCerrarFallback = modalActivo.querySelector('button.close, [data-dismiss="modal"]'); if (botonCerrarFallback) botonCerrarFallback.click(); await esperarQueElementoDesaparezca(modalActivoSelector, 5000); continue; } await delay(700); const gruposDeRadio = cuerpoDelModal.querySelectorAll('div[role="radiogroup"].el-radio-group'); if (gruposDeRadio.length === 0) { console.warn("[Script] No se encontraron grupos de radio (el-radio-group) en el modal."); } else { console.log(`[Script] Se encontraron ${gruposDeRadio.length} grupos de radio.`); } gruposDeRadio.forEach((grupo, i) => { const primeraOpcionInner = grupo.querySelector('label.el-radio .el-radio__inner'); if (primeraOpcionInner) { primeraOpcionInner.click(); console.log(`[Script] Opción 1 seleccionada en grupo ${i + 1}.`); } else { console.warn(`[Script] No se encontró la primera opción '.el-radio__inner' en el grupo ${i + 1}:`, grupo); } }); console.log("[Script] Selección de opciones automática completada. POR FAVOR, HAZ CLIC EN 'TERMINAR EVALUACIÓN' O 'SALIR' EN EL MODAL."); const modalCerrado = await esperarQueElementoDesaparezca(modalActivoSelector); if (modalCerrado) { console.log("[Script] Modal cerrado por el usuario. Pasando a la siguiente encuesta."); } else { console.warn("[Script] ¡Atención! El modal no se cerró a tiempo. Esto podría indicar un problema o que el usuario está tardando mucho."); } await delay(1500); } console.log("[Script] Proceso de respuesta de encuestas completado."); } window.addEventListener('load', () => { console.log("[Script] Página cargada. Iniciando script de encuestas en 3 segundos..."); setTimeout(responderEncuestas, 3000); }); })();