Disabilitare script in base a condizione

di il
51 risposte

51 Risposte - Pagina 3

  • Re: Disabilitare script in base a condizione

    Allora, faccio un solo script che funziona con tutte le pagine:

    // ==UserScript==
    // @name         Estrazione Editore New
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://polormb.sebina.it/sebina/catalogazione/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=undefined.
    // @grant        GM_cookie
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        function getNome(tmp) {
    
        var idx = tmp.indexOf('. ((');
    
        if(idx > -1){
        tmp = tmp.substr(0, idx);
        }
    
        tmp = tmp.split('. - ');
    
        switch(tmp.length){
        case 3:
        tmp = tmp[1];
        break;
        case 4:
        tmp = tmp[2];
        break;
        default:
        tmp = "";
        break;
        }
    
        if(tmp !== ''){
            tmp = tmp.substr(tmp.indexOf(' : ') + 2);
            console.log(tmp);
            if(tmp.indexOf('.') != -1 && tmp.split('.').length == 2){
                tmp = tmp.substr(tmp.indexOf('. ') + 1, tmp.indexOf(', ') -3);
                tmp = tmp.trim();
            }
            else {
                tmp = tmp.split(",")[0];
                tmp = tmp.trim();
            }
        }
        return tmp;
    }
    function impostaNome(tmp) {
        Array.from(document.querySelectorAll('article section.grid_container form div.grid-row label span')).filter( e => e.innerText.trim() === 'Nome')[0].parentNode.querySelector('input').value = tmp;
    }
    
    function generaCookie() {
        var elencoLabel = document.querySelectorAll("span.grid-6");
        if (elencoLabel.length > 8)
        {
            document.cookie = "voce=";
            if (elencoLabel[8].innerText == "Editore moderno")
            {
                document.cookie = "voce=Editore moderno";
            }
        }
    }
    
    function prendiValore(mio) {
        return mio.value;
    }
    
    var primaPagina = document.getElementsByClassName("ic-legami autori");
    if (primaPagina.length >0) {
        window.setTimeout(generaCookie,2000);
        return;
    }
    
    var elencoLabel = document.querySelectorAll("span.grid-6");
    if (elencoLabel.length < 8 ) {
        GM_cookie.list({name: "voce"}, (mioCookie, error) => {
        if (!error) {
            var tuttiValori = mioCookie.map(prendiValore);
            var presente = tuttiValori.indexOf("Editore moderno");
            if (presente > -1) {            
                return;
            }
            presente = tuttiValori.indexOf("Fatto");
            if (presente > -1) {
               return;
            }
            impostaNome(getNome(document.querySelector('div.meta.tito div.evidence.isbd').innerText));
            document.cookie = "voce=Fatto";        
        }
        else {
            console.log(error);
        }
      });
    }
    
    })();
  • Re: Disabilitare script in base a condizione

    Grazie, purtroppo si comporta esattamente come prima, con la sola differenza che TamperMonkey notifica 1 anzichè 2, suppongo perchè agisce un solo script. 

  • Re: Disabilitare script in base a condizione

    Ora, siccome da me funziona, utilizzando i due file in locale e mettendo

    // @match        file:///D:/Javascript/*

    il problema risiede nel fatto che nel secondo caso, cioè quando apri la pagina “estrazione editore”, non viene eseguito lo script.

    Dipende sicuramente dalla riga suddetta. Io proverei con:

    // @match       https://polormb.sebina.it/sebina/*

    Però prima elimina gli altri script che si riferiscono a queste pagine, e lascia soltanto l'ultimo      (// @name         Estrazione Editore New).

    Inoltre, per vedere se viene eseguito, visto che non si può fare il debug di Tampermonkey, potresti mettere qualche   alert('ok');   nei punti strategici; ad esempio se metti un alert, nella riga precedente a:    GM_cookie.list({….     puoi vedere se lo sta eseguendo nella seconda pagina (in estrazione editore). Se viene visualizzato l'alert, vuol dire che siamo nella seconda pagina e lo sta eseguendo…

    Nella seconda pagina, se lui trova "Editore moderno"  termina. Se non lo trova, allora scrive il nome Feltrinelli e modifica il cookie “voce=fatto”. Se trova già il cookie “voce=fatto”, termina direttamente senza fare niente. E potrai inserire il nome manualmente.

  • Re: Disabilitare script in base a condizione

    Ciao Fabio, anche con

    // @match       https://polormb.sebina.it/sebina/*

    i cookie funzionano correttamente (TamperMonkey notifica “1”), ma al solito non viene estratto l'editore (sia con Firefox che con chrome). Inserendo un alert nel codice unico la pagina “Estrazione editore” apre giustamente il banner, cfr. immagine, ma non viene mai inserito nulla nel campo Nome, anche quando non trova la voce “Editore moderno”. 

  • Re: Disabilitare script in base a condizione

    Ho provato a modificare il tempo di creazione del cookie da questa riga:

    window.setTimeout(generaCookie,2000);

    ma il risultato non varia, l'editore non viene estratto… 

  • Re: Disabilitare script in base a condizione

    La riga: 

    window.setTimeout(generaCookie,2000); 

    viene eseguita nella prima pagina. Serve per generare correttamente il cookie. Funziona.

    Devi provare a piazzare qualche “alert('ok');” nelle parti successive del codice, per vedere se viene eseguito nella pagina “estrazione editore”…

    è lì il problema.

  • Re: Disabilitare script in base a condizione

    Ho notato che valorizzando così il metadato di TamperMonkey:

    // @match        https://polormb.sebina.it/* 

    il comportamento della prima pagina è corretto, cioè viene creato un cookie se è presente la scritta “Editore moderno” (cfr. link immagine 1), non creato se non è presente la scritta “Editore moderno”. Ciò che cambia è il comportamento della pagina “Estrazione editore”, che ora invece estrae sempre il valore dell'editore nel campo Nome. il problema è però che questa estrazione avviene anche quando c'è la scritta “Editore moderno” nella prima pagina. Nella pagina “Estrazione editore”, inoltre, Il cookie viene sempre creato, cfr. link immagine 2

  • Re: Disabilitare script in base a condizione

    Nuova versione script:

    // ==UserScript==
    // @name         Estrazione Editore New
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://polormb.sebina.it/sebina/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=undefined.
    // @grant        GM_cookie
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        function getNome(tmp) {
    
        var idx = tmp.indexOf('. ((');
    
        if(idx > -1){
        tmp = tmp.substr(0, idx);
        }
    
        tmp = tmp.split('. - ');
    
        switch(tmp.length){
        case 3:
        tmp = tmp[1];
        break;
        case 4:
        tmp = tmp[2];
        break;
        default:
        tmp = "";
        break;
        }
    
        if(tmp !== ''){
            tmp = tmp.substr(tmp.indexOf(' : ') + 2);
            console.log(tmp);
            if(tmp.indexOf('.') != -1 && tmp.split('.').length == 2){
                tmp = tmp.substr(tmp.indexOf('. ') + 1, tmp.indexOf(', ') -3);
                tmp = tmp.trim();
            }
            else {
                tmp = tmp.split(",")[0];
                tmp = tmp.trim();
            }
        }
        return tmp;
    }
    function impostaNome(tmp) {
        Array.from(document.querySelectorAll('article section.grid_container form div.grid-row label span')).filter( e => e.innerText.trim() === 'Nome')[0].parentNode.querySelector('input').value = tmp;
    }
    
    // https://polormb.sebina.it/sebina/catalogazione/*
    
    function generaCookie() {
        
        var elencoLabel = document.getElementsByClassName("grid-6");    
        for (let autore of elencoLabel) {
            if (autore.innerText == "Editore moderno") {
                 document.cookie = "voce=Editore moderno";
            }
        }
    }
    
    function prendiValore(mio) {
        return mio.value;
    }
    
    var primaPagina = document.getElementsByClassName("ic-legami autori");
    if (primaPagina.length >0) {
        window.setTimeout(generaCookie,2000);
        return;
    }
    
    var elencoElementi = document.getElementsByClassName("tooltip");
    if (elencoElementi.length == 1 ) {
        GM_cookie.list({name: "voce"}, (mioCookie, error) => {
        if (!error) {
            var tuttiValori = mioCookie.map(prendiValore);
            var presente = tuttiValori.indexOf("Editore moderno");
            if (presente > -1) {
                return;
            }
            presente = tuttiValori.indexOf("Fatto");
            if (presente > -1) {
               return;
            }
            impostaNome(getNome(document.querySelector('div.meta.tito div.evidence.isbd').innerText));
            document.cookie = "voce=Fatto";        
        }
        else {
            console.log(error);
        }
      });
    }
    
    })();
  • Re: Disabilitare script in base a condizione

    Grazie! In questo caso i cookie della prima pagina funzionano correttamente (TamperMonkey notifica “1”), ma dalla seconda pagina non viene mai estratto l'editore, anche allungando o riducendo l'URL del campo // @match.   

  • Re: Disabilitare script in base a condizione

    Dai che forse ce l'abbiamo fatta:

    // ==UserScript==
    // @name         Estrazione Editore New
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://polormb.sebina.it/sebina/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=undefined.
    // @grant        GM_cookie
    // ==/UserScript==
    
    (function() {
        'use strict';
    
        function getNome(tmp) {
    
        var idx = tmp.indexOf('. ((');
    
        if(idx > -1){
        tmp = tmp.substr(0, idx);
        }
    
        tmp = tmp.split('. - ');
    
        switch(tmp.length){
        case 3:
        tmp = tmp[1];
        break;
        case 4:
        tmp = tmp[2];
        break;
        default:
        tmp = "";
        break;
        }
    
        if(tmp !== ''){
            tmp = tmp.substr(tmp.indexOf(' : ') + 2);
            console.log(tmp);
            if(tmp.indexOf('.') != -1 && tmp.split('.').length == 2){
                tmp = tmp.substr(tmp.indexOf('. ') + 1, tmp.indexOf(', ') -3);
                tmp = tmp.trim();
            }
            else {
                tmp = tmp.split(",")[0];
                tmp = tmp.trim();
            }
        }
        return tmp;
    }
    function impostaNome(tmp) {
        Array.from(document.querySelectorAll('article section.grid_container form div.grid-row label span')).filter( e => e.innerText.trim() === 'Nome')[0].parentNode.querySelector('input').value = tmp;
    }
    
    // https://polormb.sebina.it/sebina/catalogazione/*
    
    function generaCookie() {
        
        var elencoLabel = document.getElementsByClassName("grid-6");    
        for (let autore of elencoLabel) {
            if (autore.innerText == "Editore moderno") {
                 document.cookie = "voce=Editore moderno";
                 break;
            }
        }
    }
    
    function prendiValore(mio) {
        return mio.value;
    }
    
    var primaPagina = document.getElementsByClassName("ic-legami autori");
    if (primaPagina.length >0) {
        window.setTimeout(generaCookie,2000);
        return;
    }
    
    var secondaPagina = document.querySelectorAll("a");
    for (let titolo of secondaPagina) {
        if (titolo.innerText == "Ricerca in VIAF") {
            GM_cookie.list({name: "voce"}, (mioCookie, error) => {
                 if (!error) {
                      var tuttiValori = mioCookie.map(prendiValore);
                      var presente = tuttiValori.indexOf("Editore moderno");
                      if (presente > -1) {
                          return;
                      }
                      presente = tuttiValori.indexOf("Fatto");
                      if (presente > -1) {
                          return;
                      }
                      impostaNome(getNome(document.querySelector('div.meta.tito div.evidence.isbd').innerText));
                      document.cookie = "voce=Fatto";
                      return;
                  }
                  else {
                      console.log(error);
                  }
            });
        }
    }
    
    })();
  • Re: Disabilitare script in base a condizione

    Ciao, grazie! Quanto vorrei darti ragione, ma anche così dalla seconda pagina l'editore non viene mai estratto… :-(

  • Re: Disabilitare script in base a condizione

    Ciao Fabio, non è possibile un approccio diverso? 

    Ad esempio con un codice simile a questo? https://pastebin.com/zBLDz3ZV 

  • Re: Disabilitare script in base a condizione

    Non si tratta di metodo, si tratta di capire se effettivamente gli script creati finora con TamperMonkey vengano eseguiti sulla seconda pagina (estrazione editore), perchè comunque, chiaramente, sulla pagina che hai messo tu, come file .html, a me funzionano. Mentre mi pare di capire che, quando tu vai sul tuo server, gli script vengano ignorati, almeno riguardo alla seconda pagina. Perchè il codice è semplice, ma dev'essere eseguito per funzionare.

    Quindi la prima cosa da fare è di provare uno script come il seguente (mettendo il percorso giusto nel @match), per vedere se l'alert viene visualizzato:

    // ==UserScript==
    // @name         Verifica
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        file:///D:/Javascript/*
    // @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
    // @grant        none
    // ==/UserScript==
    
    (function() {
        'use strict';
    
         var secondaPagina = document.querySelectorAll("a");
         for (let titolo of secondaPagina) {
             if (titolo.innerText == "Ricerca in VIAF") {
                 alert("Siamo nella seconda pagina (estrazione editore)");
             }
         }
    
    })();

    Provalo e dimmi se funziona…

  • Re: Disabilitare script in base a condizione

    Buongiorno Fabio, l'alert viene visualizzato (cfr. link) provando così:

    // ==UserScript==
    // @name         Estrazione Editore New
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://polormb.sebina.it/sebina/*
    // @icon         https://www.google.com/s2/favicons?sz=64&domain=undefined.
    // @grant        GM_cookie
    // ==/UserScript==
    (function() {
       'use strict';
       function getNome(tmp) {
       var idx = tmp.indexOf('. ((');
       if(idx > -1){
       tmp = tmp.substr(0, idx);
       }
       tmp = tmp.split('. - ');
       switch(tmp.length){
       case 3:
       tmp = tmp[1];
       break;
       case 4:
       tmp = tmp[2];
       break;
       default:
       tmp = "";
       break;
       }
       if(tmp !== ''){
           tmp = tmp.substr(tmp.indexOf(' : ') + 2);
           console.log(tmp);
           if(tmp.indexOf('.') != -1 && tmp.split('.').length == 2){
               tmp = tmp.substr(tmp.indexOf('. ') + 1, tmp.indexOf(', ') -3);
               tmp = tmp.trim();
           }
           else {
               tmp = tmp.split(",")[0];
               tmp = tmp.trim();
           }
       }
       return tmp;
    }
    function impostaNome(tmp) {
       Array.from(document.querySelectorAll('article section.grid_container form div.grid-row label span')).filter( e => e.innerText.trim() === 'Nome')[0].parentNode.querySelector('input').value = tmp;
    }
    // https://polormb.sebina.it/sebina/catalogazione/*
    function generaCookie() {
       var elencoLabel = document.getElementsByClassName("grid-6");
       for (let autore of elencoLabel) {
           if (autore.innerText == "Editore moderno") {
                document.cookie = "voce=Editore moderno";
                break;
           }
       }
    }
    function prendiValore(mio) {
       return mio.value;
    }
    var primaPagina = document.getElementsByClassName("ic-legami autori");
    if (primaPagina.length >0) {
       window.setTimeout(generaCookie,2000);
       return;
    }
    var secondaPagina = document.querySelectorAll("a");
    for (let titolo of secondaPagina) {
       if (titolo.innerText == "Ricerca in VIAF") {
           alert("Siamo nella seconda pagina (estrazione editore)");
           GM_cookie.list({name: "voce"}, (mioCookie, error) => {
                if (!error) {
                     var tuttiValori = mioCookie.map(prendiValore);
                     var presente = tuttiValori.indexOf("Editore moderno");
                     if (presente > -1) {
                         return;
                     }
                     presente = tuttiValori.indexOf("Fatto");
                     if (presente > -1) {
                         return;
                     }
                     impostaNome(getNome(document.querySelector('div.meta.tito div.evidence.isbd').innerText));
                     document.cookie = "voce=Fatto";
                     return;
                 }
                 else {
                     console.log(error);
                 }
           });
       }
    }
    })();
  • Re: Disabilitare script in base a condizione

    Perfetto, allora tu devi vedere se, quando passi dalla prima alla seconda pagina, e non viene estratto nessun editore, poi il cookie “voce” deve contenere il valore “Fatto”. Se lo contiene, allora vuol dire che non funziona bene il tuo metodo “impostaNome” e che il problema è lì.

Devi accedere o registrarti per scrivere nel forum
51 risposte