// ==UserScript== // @name Estrattore Manuale Tabella Portale Trasporto // @namespace http://tampermonkey.net/ // @version 2.0 // @description Aggiornamento dati tramite tasto Cerca senza ricaricare la pagina // @author Gemini // @match https://www.ilportaledeltrasporto.it/nove/gestioneistanzanove/spa/le-mie-istanze* // @grant GM_xmlhttpRequest // @connect 192.168.1.33 // ==/UserScript== (function() { 'use strict'; const CONFIG = { endpoint: 'http://192.168.1.33/hook/ans2.php', interval: 6000 // 6 secondi tra un invio e l'altro }; console.log("%c Script in modalità Manuale Attivo. Imposta i filtri e lo script farà il resto.", "color: #00DBFF; font-weight: bold;"); function eseguiCiclo() { // 1. Cerca il pulsante "Cerca" const buttons = Array.from(document.querySelectorAll('button')); const searchButton = buttons.find(btn => btn.innerText.trim().toUpperCase() === "CERCA" ); if (searchButton) { console.log("Aggiornamento dati (clic su Cerca)..."); searchButton.click(); // 2. Aspetta che la tabella si aggiorni (4 secondi) setTimeout(() => { estraiEInvia(); }, 4000); } else { console.warn("Pulsante 'Cerca' non trovato. Riprovo tra 20 secondi."); setTimeout(eseguiCiclo, CONFIG.interval); } } function estraiEInvia() { const rows = document.querySelectorAll('[role="row"]'); const results = []; rows.forEach(row => { const cells = row.querySelectorAll('[role="cell"]'); if (cells.length >= 5) { const idIstanza = cells[0].innerText.trim(); if (idIstanza !== "" && idIstanza.toLowerCase() !== "identificativo istanza") { results.push({ identificativo: idIstanza, data_inserimento: cells[1]?.innerText.trim(), stato: cells[2]?.innerText.trim(), tipologia: cells[3]?.innerText.trim(), targa_telaio: cells[4]?.innerText.trim() }); } } }); if (results.length > 0) { console.log(`Invio di ${results.length} record in corso...`); GM_xmlhttpRequest({ method: "POST", url: CONFIG.endpoint, headers: { "Content-Type": "application/json" }, data: JSON.stringify(results), onload: function(response) { console.log("%c OK: Dati inviati con successo.", "color: #00FF00;"); // 3. Programma il prossimo ciclo senza ricaricare la pagina setTimeout(eseguiCiclo, CONFIG.interval); }, onerror: function(err) { console.error("Errore invio server locale. Riprovo tra 20 secondi."); setTimeout(eseguiCiclo, CONFIG.interval); } }); } else { console.warn("Nessun dato trovato in tabella. Riprovo nel prossimo ciclo."); setTimeout(eseguiCiclo, CONFIG.interval); } } // Avvio del primo ciclo dopo 5 secondi dal caricamento della pagina // per darti il tempo di impostare i filtri se vuoi, // altrimenti lo script girerà con i filtri che trova. setTimeout(eseguiCiclo, 5000); })();