Autoclick su pulsante Conferma

di E pluribus unum il
29 risposte

Buonasera, sto usando un'estensione di Chrome per autocliccare il pulsante "Conferma" (stampa) di questa pagina (allegato "conferma stampa"). L'autoclick genera regolarmente un messaggio: 'La stampa è stata inoltrata' (cfr. allegato "stampa inoltrata"). Il problema è che lo script fa andare in loop la pagina, che si aggiorna all'infinito:

function autoClick() {
labels = document.querySelectorAll('label');
if (labels[1].innerText == "Modello di stampa")
{document.getElementsByClassName("button confirm")[0].click();}
}
var first = true;
if(first){
first=false;
autoClick ();
}


Ho anche provato con questa condizione:

  const elMessage = document.querySelector('.messages.confirms');
  if (elMessage && elMessage.textContent.trim() === 'La stampa è stata inoltrata') {
    document.querySelector('.button.confirm')?.click();
  }


In questo caso la pagina va in loop, ma dopo aver cliccato manualmente il pulsante "Conferma".
Mi aiutereste a risolvere? Grazie mille!

29 Risposte

  • È lo script che è in loop poichè l'ultima istruzione autoClick() viene eseguita sempre , la funzione autoClick() “si chiama” all'infinito

  • Provato anche così ma la pagina non reagisce:

    function autoClick() {

        labels = document.querySelectorAll('label');

        

        if (labels[1].innerText == "Modello di stampa")

        {

          let si = localStorage.getItem('stampaInoltrata');

          if(si == null) {

            localStorage.setItem('stampaInoltrata','true');

            let button = document.getElementsByClassName("button confirm")[0];  

            button.click();

          }             

        }

    }

    autoClick();

  • 11/12/2022 - E pluribus unum ha scritto:


    In questo caso la pagina va in loop, ma dopo aver cliccato manualmente il pulsante "Conferma".
    Mi aiutereste a risolvere? Grazie mille!

    Ne avevi già parlato in questa discussione: perché aprirne un'altra?

  • Ho cambiato gli script, non volevo riagganciarmi tardi ad una vecchia discussione… 

  • Ciao, ho guardato il file “conferma stampa.html”: il problema sta nel fatto che quando l'estensione di Chrome clicca automaticamente sul pulsante, viene effettuato un submit del form che contiene i due pulsanti. E ovviamente il submit è necessario per inviare i dati inseriti alla action impostata nel form.

    Quindi, effettuando il submit del form, poi viene automaticamente ricaricata la pagina e l'estensione effettua nuovamente un autoclick che genera un submit… e così via, all'infinito…

    La stessa identica cosa, ho verificato che accade se, invece di usare l'estensione, metti l'autoclick utilizzando una funzione assegnata a windows.onload).

    L'unica soluzione che effettivamente risolve il problema (l'ho provata) è quella di assegnare una funzione al pulsante che, dopo il primo autoclick, lo rimuove dalla pagina, così non può essere più cliccato, in questo modo:

    function togliPulsante()
    {	   	       
        document.getElementsByClassName("button confirm")[0].remove();		
    }
    
    document.getElementsByClassName("button confirm")[0].setAttribute("onclick","togliPulsante()");
    

    Puoi piazzarla direttamente dentro la tua funzione autoclick() che, immagino venga eseguita dall'estensione di Chrome:

    function autoClick()
    {
        labels = document.querySelectorAll('label');
        if (labels[1].innerText == "Modello di stampa")
        {
            document.getElementsByClassName("button confirm")[0].setAttribute("onclick","togliPulsante()");
            document.getElementsByClassName("button confirm")[0].click();
        }
    }
    
    function togliPulsante()
    {	   	       
        document.getElementsByClassName("button confirm")[0].remove();		
    }
    
  • Grazie Fabio, la pagina non reagisce come puoi osservare dal video:

    https://www.loom.com/share/fb3b12e25a0640a092c774765aba5bce

    Se può esserti utile ho ripreso tutti i passaggi, partendo dalla pagina precedente, dove clicco manualmente su “Stampa etichette” (quarto pulsante a destra dall'alto), cfr. allegato “Stampa etichette”. Quindi al termine del video clicco manualmente su “Conferma Stampa” e sul pulsante “Report” (in alto a destra). 

  • Riassumendo: tu clicchi su “Stampa etichette”, il browser va sulla pagina con la scelta della stampante e del formato, e con l'estensione del Chrome vorresti fare un autoclick, in maniera da confermare automaticamente la pagina e visualizzare “stampa inoltrata.html”.

    Allora, visto che facendo l'autoclick sul pulsante “Conferma” si ottiene il submit del form con conseguente POST ad una action sul server denominata:

    D_STA_ETICOLACQ_GES.do   (che credo sia in linguaggio java),

    basta che tu fai terminare la action java con un bel:

    return "redirect:" + redirectUrl;

    mettendo come stringa redirectUrl, l'indirizzo completo sul server della pagina “stampa inoltrata.html”.

    Così, quando viene fatto il submit, il form viene passato alla action che elabora i suoi dati, e poi restituisce il controllo ad un'altra View, quella appunto, della pagina "stampa inoltrata.html".

  • Questo che hai scritto è l'URL con cui, quando fai click sul pulsante Conferma, viene richiamata l'action "D_STA_ETICOLACQ_GES.do" sul server.

    Tu vai in questa action (che si occupa di processare i dati del form) e alla fine vedrai che deve finire con un'istruzione del tipo:

     return “Redirect: https://polormb.sebina.it/sebina/catalogazione/stampa inoltrata.html”

    o qualcosa di simile… (non so dove si trova il file “stampa inoltrata.html” sul tuo server).

    Dai un'occhiata qua:

    https://stackoverflow.com/questions/17955777/redirect-to-an-external-url-from-controller-action-in-spring-mvc

    così capisci come fa la action (la classe del controller sul server a cui è diretto il POST del tuo form) a passare il controllo ad un altro URL.

  • Ma io non ho l'accesso al server, vedo le stesse pagine e lo stesso codice che vedi tu… 

  • Ah ok, allora questa volta abbiamo risolto veramente:

    modifica così la tua funzione autoclick():

    function autoClick()
    {
         var nomePagina = window.location.href;
         labels = document.querySelectorAll('label');
         if (labels[1].innerText == "Modello di stampa" && nomePagina.endsWith("conferma stampa.html"))
         {
              document.getElementsByClassName("button confirm")[0].click();
         }
    }
  • Mhm, come prima, non reagisce… La vedo dura… 

  • Prova così:

    function autoClick()
    {
         var tuttiA = document.getElementsByTagName("a");     
         labels = document.querySelectorAll('label');
         if (labels[1].innerText == "Modello di stampa" && tuttiA[1].text == "4")
         {
              document.getElementsByClassName("button confirm")[0].click();
         }
    }
  • Non risponde neanche così… 

Devi accedere o registrarti per scrivere nel forum
29 risposte