Para automatizar la reproducción de cursos en la versión web de Zhihuishu, se pueden utilizar scripts ejecutados desde la consola de desarrollo del navegador. A continuación se presentan dos variantes funcionales.
Funcionalidades implementadas
- Velocidad de reproducción ajustada a 1.5x (máximo disponible)
- Audio silanciado automáticamente
- Avance automático al siguiente video al completar el actual
- Cierre automático de ventanas emergentes de preguntas
Procedimiento de ejecución
Acceda a la plataforma web de Zhihuishu, presione F12 para abrir las herramientas de desarrollo, seleccione la pestaña Console (Consola), pegue el código deseado y presione Enter.
Variante 1: Enfoque basado en intervalos
// Silenciar audio
document.querySelector('.volumeIcon').click();
// Configurar velocidad máxima
document.getElementsByClassName('speedTab15')[0].click();
// Bucle de verificación cada 3 segundos
const verificador = setInterval(() => {
const barraProgreso = document.getElementsByClassName('passTime')[0];
if (barraProgreso.style.width === '100%') {
// Transición al siguiente video tras 1 segundo
setTimeout(() => {
document.getElementById('nextBtn').click();
}, 1000);
// Reaplicar configuraciones tras carga del nuevo video
setTimeout(() => {
document.querySelector('.volumeIcon').click();
document.getElementsByClassName('speedTab15')[0].click();
}, 4000);
}
// Detección y cierre de pop-ups de evaluación
const botonPlay = document.getElementsByClassName('bigPlayButton pointer')[0];
if (botonPlay && botonPlay.style.display === 'block') {
const opciones = document.getElementsByClassName('topic-item');
if (opciones.length > 0) opciones[0].click();
const dialogos = document.getElementsByClassName('el-dialog__footer');
if (dialogos.length > 5) dialogos[5].click();
const cerrar = document.getElementsByClassName('el-dialog__headerbtn');
if (cerrar.length > 5) cerrar[5].click();
const playBtn = document.getElementsByClassName('playButton');
if (playBtn.length > 0) playBtn[0].click();
}
}, 3000);
Variante 2: Enfoque basado en eventos DOM
const contenedor = $("body");
const listaVideos = $(".catalogue_ul1 li[id*=video-]");
let contadorPopups = 1;
let contadorVideos = 1;
listaVideos.css("color", "blue");
console.log(`Se detectaron ${listaVideos.length} secciones, marcadas en azul`);
// Configuración inicial tras 3 segundos
setTimeout(() => {
$('.speedTab15').click();
$('.volumeIcon').click();
console.log("Configuración aplicada: silencio + 1.5x");
}, 3000);
// Escucha de cambios en el DOM
contenedor.on("DOMNodeInserted", function(evento) {
const texto = evento.target.textContent;
if (texto === "关闭") {
console.log(`Popup detectado #${contadorPopups}`);
setTimeout(() => {
const iframe = document.getElementById("tmDialog_iframe");
const opciones = iframe.contentWindow.document
.getElementsByClassName("answerOption")[0]
.getElementsByTagName("input")[0];
opciones.click();
$(".popbtn_cancel").click();
console.log("Popup cerrado");
}, 3000);
contadorPopups++;
} else if (texto.includes("100%")) {
console.log("Video completado, cambiando al siguiente");
$('.next_lesson_bg').find('a').trigger('click');
setTimeout(() => {
$('.volumeIcon').click();
$('.speedTab15').click();
console.log("Configuración reaplicada");
}, 6000);
contadorVideos++;
console.log(`Reproduciendo video #${contadorVideos}`);
}
});
Consideraciones importantes
- Al refrescar la página o navegar manualmente, el script se detiene y debe ejecutarse nuevamente.
- Se recomienda utilizar Chrome o Firefox. En navegadores basados en Chromium, activar el modo de velocidad extrema para mayor estabilidad.
- Se sugiere procesar un capítulo por sesión, sin exceder las cuatro horas continuas para evitar bloqueos del sistema.
- Entre capítulos puede existir un bloqueo de navegación automática por mecanismos anti-automatización de la plataforma, requiriendo avance manual.