Haciendo un scrip!

Buenas, estoy haciendo (un compañero mas bien jaja) un scrip para que una pagina web se refresque cada 10-30 segundos y se marque una casilla en el.

la parte de refrescar la pagina funciona pero por algun motivo no marca la casilla.

la pagina web es la siguiente:

http://mundo.7dtd.eu:8087/static/index.html

la casilla que debe marcarse es del desplegable que hay a la derecha arriba cuadrado y marcar la casilla que pone "vehicles", pero esto ultimo por algun motivo no lo hace.

la extension de chrome que estamos usando se llama "tampermonkey" y el scrip es el siguiente:

// ==UserScript==
// @name Auto Refresh and Select Checkbox
// @namespace http://tampermonkey.net/
// @version 2024-07-11
// @description Actualiza la página automáticamente y selecciona un checkbox específico
// @author
// @match http://mundo.7dtd.eu:8087/static/index.html
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==

(function() {
'use strict';

// Intervalo de actualización en milisegundos (p. ej., 30000 para 30 segundos)
const interval = 30000;

// Función para seleccionar el checkbox con la etiqueta "Vehicles"
function selectCheckbox() {
const labels = document.querySelectorAll('.leaflet-control-layers-overlays label');
labels.forEach(label => {
if (label.innerText.trim() === 'Vehicles') {
const checkbox = label.querySelector('input[type="checkbox"]');
if (checkbox && !checkbox.checked) {
checkbox.click();
checkbox.dispatchEvent(new Event('change', { bubbles: true }));
}
}
});
}

// Función para recargar la página y seleccionar el checkbox
function refreshAndSelect() {
window.location.href = window.location.href;
setTimeout(selectCheckbox, 5000); // Espera 5 segundos después de la recarga para seleccionar
}

// Esperar hasta que el contenido del DOM esté completamente cargado
window.addEventListener('load', function() {
setInterval(refreshAndSelect, interval);
});
})();


a ver si alguien diera con la solucion que llevamos aqui 2 horas... aburrimiento nocturno jeje
Al copiar el código de la función selectCheckbox en la consola del navegador, funciona bien y se marca la casilla, así que el problema seguramente está en como se llama a la función u otro lado.

Al ordenar la recarga de la página, cualquier código que hay despues no se va a ejecutar, porque recargar la página implica parar la ejecución, borrar/olvidar todo lo realizado y volver a empezar. Por lo que el problema parece que está en que nunca llegas realmente a llamar a la función selectCheckbox.

// Función para recargar la página y seleccionar el checkbox
function refreshAndSelect() {
window.location.href = window.location.href; // Recargar de página === Se detiene la ejecución de código y se olvida cualquier código ejecutado
setTimeout(selectCheckbox, 5000); // <-- No va a esperar 5s para llamar a la función porque la página se ha recargado
}


setTimeout(selectCheckbox, 5000); lo tienes que meter en el evento load, para que se pueda programar la llamada a la función selectCheckbox tras la carga de la página.

// Esperar hasta que el contenido del DOM esté completamente cargado
window.addEventListener('load', function() {
setTimeout(selectCheckbox, 5000); // Espera 5s después de la carga de la página para seleccionar
setInterval(refreshAndSelect, interval);
});
})();


Hay que entender que al recargar la página, se pierde cualquier cosa que ha hecho el script y la página, y se vuelve a cargar de nuevo todo como si hubieses abierto la página por primera vez.
WaterDark escribió:El código copiado en la consola funciona.

// Función para recargar la página y seleccionar el checkbox
function refreshAndSelect() {
window.location.href = window.location.href; // Recarga de página = se detiene la ejecución de código y se olvida cualquier código ejecutado
setTimeout(selectCheckbox, 5000); // Espera 5 segundos después de la recarga para seleccionar
}

Tras ejecutar la recarga de la pagina usando window.location.href = window.location.href; ya no tiene sentido hacer nada mas porque se detiene la ejecución de código y se vuelve a cargar la página y el script desde el principio, por lo que setTimeout(selectCheckbox, 5000); nunca se llega a ejecutar.
setTimeout(selectCheckbox, 5000); lo tienes que meter en el evento onload.

// Esperar hasta que el contenido del DOM esté completamente cargado
window.addEventListener('load', function() {
setTimeout(selectCheckbox, 5000);
setInterval(refreshAndSelect, interval);
});
})();


Entiendo lo que dices pero no se como hacerlo, me lo puedes hacer tu para hacerle copy-paste?

P.D: Si ya esta puesto jaja muchas gracias!
@QueTeCuro De nada, y perdona por el churro de respuesta. La he editado para que se entienda mejor y no le de un derrame al siguiente que la lea.
3 respuestas