Disabilitare script in base a condizione

di E pluribus unum il
51 risposte

51 Risposte - Pagina 3

  • 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);
        }
      });
    }
    
    })();
  • Grazie, purtroppo si comporta esattamente come prima, con la sola differenza che TamperMonkey notifica 1 anzichè 2, suppongo perchè agisce un solo script. 

  • 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.

  • 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”. 

  • 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… 

  • 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.

  • 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

  • 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);
        }
      });
    }
    
    })();
  • 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.   

  • 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);
                  }
            });
        }
    }
    
    })();
  • Ciao, grazie! Quanto vorrei darti ragione, ma anche così dalla seconda pagina l'editore non viene mai estratto… :-(

  • 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…

  • 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);
                 }
           });
       }
    }
    })();
  • 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