Disabilitare script in base a condizione

di il
51 risposte

51 Risposte - Pagina 2

  • Re: Disabilitare script in base a condizione

    Grazie mille, ma ancora nulla, l'editore non viene mai estratto, nemmeno la prima volta, sia usando TamperMonkey (modificando solo il valore di // @match con l'URL del sito) sia usando Autofill, eliminando

     (function() {
       'use strict';

    ………….…

     })();

    Preciso che la pagina originale dove agisce lo script per l'estrazione dell'editore ha questo aspetto, il campo Nome è vuoto prima che lo script agisca inserendo il valore (variabile) dell'editore:

    https://smartsite.w3spaces.com/Estrazione_editore.html 

  • Re: Disabilitare script in base a condizione

    Ciao, io ho provato, con Tampermonkey sul Firefox, lo script seguente sulla pagina che tu hai appena scritto (https://smartsite.w3spaces.com/Estrazione_editore.html) e ti posso assicurare che funziona perfettamente: se non hai caricato prima altre pagine, e sul dominio https://smartsite.w3spaces.com non ci sono cookie con la “voce” “Editore moderno”, lui inserisce il valore “Feltrinelli” nel campo Nome.

    Se invece, prima carichi la tua “prima pagina” (quella con: Enti, istituzioni e famiglie), viene registrato un cookie (name="voce", value="Editore moderno") e quando poi carichi la pagina “Estrazione_editore” lui non fa niente e il campo Nome resta vuoto, così puoi inserirlo manualmente.

    Ma ricorda: entrambe le pagine devono appartenere allo stesso dominio altrimenti i cookie non funzionano; il campo @match deve contenere l'URL del file e il campo @grant deve essere: GM_cookie

    // ==UserScript==
    // @name         Estrazione Editore2
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        file:///D:/Javascript/estrazione%20editore.html
    // @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 prendiValore(mio) {
        return mio.value;
    }
    
    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)
            {
               impostaNome(getNome(document.querySelector('div.meta.tito div.evidence.isbd').innerText));
            }
        }
        else {
            console.log(error);
        }
      });
    }
    
    })();
  • Re: Disabilitare script in base a condizione

    Buongiorno, avevo provato con Chrome, ed ora anche con Firefox, ma il risultato non cambia. 

    Sì, esattamente, entrambe le pagine appartengono allo stesso dominio.

    La prima pagina a caricarsi è sempre “Prima pagina”, appunto, e sempre dopo questa viene caricata la pagina “Estrazione editore”. Però il campo Nome non deve restare vuoto la prima volta, ma deve estrarre il valore dell'editore (ad es. Feltrinelli, oppure Einaudi, etc.), e solo successivamente all'estrazione non deve fare nulla permettendo di inserire altri valori manualmente (autori, curatori, etc.). 

    Ho girato un video per maggiore chiarezza:

    link video

  • Re: Disabilitare script in base a condizione

    Quindi, scriviamo per bene la sequenza temporale:

    1) Viene caricata la pagina “prima pagina”, e si controlla se c'è la scritta “Editore moderno” sotto la voce “Enti, istituzioni e famiglie”;

    2) Viene caricata la pagina “Estrazione editore”: se non c'era la scritta “Editore moderno” di cui sopra, deve estrarre “Feltrinelli” e metterlo nel campo Nome una sola volta, cioè solo quando si proviene dalla pagina “prima pagina”;

    3) Le volte successive che si apre la pagina “Estrazione editore” non deve fare niente, consentendo di inserire i valori manualmente.

    Giusto?

  • Re: Disabilitare script in base a condizione

    Proprio così, esatto!

  • Re: Disabilitare script in base a condizione

    Ok, allora nella pagina “estrazione editore” utilizza lo script seguente:

    // ==UserScript==
    // @name         Estrazione Editore2
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        file:///D:/Javascript/estrazione%20editore2.html
    // @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 prendiValore(mio) {
        return mio.value;
    }
    
    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

    Provato (inserendo l'URL nel campo match di entrambi gli script), ma purtroppo anche così non viene estratto l'editore neppure la prima volta… :(

  • Re: Disabilitare script in base a condizione

    Se tu apri la “prima pagina” e poi apri “estrazione editore”, se non c'è scritto Editore moderno (nella prima pagina), l'editore "Feltrinelli" viene estratto solo la prima volta, e viene messo nel campo Nome.

  • Re: Disabilitare script in base a condizione

    Sì, questo dovrebbe essere il comportamento, ma la prima estrazione non avviene, ho provato sia con Chrome che con Firefox.

    Ti giro il nuovo video: 

    link video

  • Re: Disabilitare script in base a condizione

    Non so se chiaro, ma alla pagina "Estrazione editore" si giunge sempre dalla prima pagina, sia per l'estrazione automatica dell'editore, sia per l'inserimento manuale di autori, curatori, etc.

  • Re: Disabilitare script in base a condizione

    Ciao Fabio, potresti aiutarmi a capire perchè l'editore non viene estratto? 

  • Re: Disabilitare script in base a condizione

    Io faccio così:

    1) Apro il Firefox, dove è installato Tampermonkey con i due script attivati e funzionanti;

    2) Apro la “prima pagina.html” in un'altra scheda, e così viene settato il cookie “voce=Editore moderno”; si può verificare premendo F12;

    3) Apro “estrazione editore.html” in un'altra scheda e ovviamente il nome dell'editore non viene messo, perchè la prima pagina conteneva “Editore moderno”.

    4) A questo punto se, premendo F12, vado sul cookie e cambio il suo contenuto, appena ricarico (per una volta) la pagina “estrazione editore” viene subito messa la scritta “Feltrinelli” nel campo nome. Se a questo punto cancello la scritta e ricarico di nuovo la pagina, invece non mette più niente come è giusto che sia.

    Quindi, per me funziona perfettamente, non saprei che altro aggiungere. Non so se il tuo Firefox ha un comportamento restrittivo o personalizzato coi cookie, e quindi non li memorizza… o qualcosa di simile…

  • Re: Disabilitare script in base a condizione

    Ok, ho provato a disabilitare le estensioni e ad operare sia con Firefox che con Chrome o MS Edge, ma si comporta ugualmente. 

    Non mi sembra che venga generato il cookie (F12 > Archiviazione > Cookie)…

  • Re: Disabilitare script in base a condizione

    Infatti, nel tuo caso lo script non è stato neanche eseguito. Altrimenti ci sarebbe la notifica in alto, sull'icona di Tampermonkey. Verifica attentamente il campo @match.

  • Re: Disabilitare script in base a condizione

    Allora, ho fatto un passo avanti. Appena si caricano la prima e la seconda pagina si apre istantaneamente un URL lunga differente rispetto alle due pagine e poi si ricomprime. Entrambe le pagine iniziano con:

    https://polormb.sebina.it/sebina/catalogazione/* (appena riesco a leggere la parola “catalogazione”)

    Se inserisco questa URL in match l'icona TamperMonkey notifica un 2 per entrambe le pagine, e la prima pagina, se contiene la scritta “Editore moderno”, genera correttamente il cookie “voce”, cfr. link allo screenshot

    Invece, correttamente, il cookie non viene generato quando l'intestazione “Persone, enti e famiglie” non contiene la scritta “Editore moderno” (la notifica di TamperMonkey permane), tuttavia al caricamento della pagina “Estrazione editore” non viene estratto l'editore (es. Feltrinelli). E' solo quest'ultimo il comportamento da correggere.

Devi accedere o registrarti per scrivere nel forum
51 risposte