Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Aprire due filtri consecutivi da una pagina

    Buongiorno,
    con uno userscript vorrei aprire da questa pagina due filtri, "Apri la lista completa" e, successivamente, "Tutte le biblioteche". Ho provato ad usare questo userscript, ma funziona solo aggiornando la pagina:
    codice:
    (function() {
      'use strict';
    
      window.addEventListener('load', function() {
        const section = document.getElementById('biblioteche');
        const details = section.querySelector('details');
        const link = section.querySelector('li.tutte a')
    
        if (details) details.click();
        link.click();
      }, false);
    })();


    Dato che la stessa pagina si apre a partire dal click su un titolo, ad esempio dal prima titolo di questo link, ho anche provato, ma senza successo, ad usare questa alternativa:
    codice:
    (function() {
      'use strict';
    
    
      const links = document.querySelectorAll('a[title="Vai alla scheda del documento"]');
    
    
      links.forEach(link => {
        link.addEventListener('click', function(event) {
    
          // Impedisce il comportamento predefinito del collegamento
          event.preventDefault();
    
    
          const section = document.getElementById('biblioteche');
          const details = section.querySelector('details');
          const tutteLink = section.querySelector('li.tutte a');
    
    
          if (details) details.click();
          tutteLink.click();
        });
      });
    })();


    Grazie!
    Ultima modifica di Annuitcoeptis; 01-06-2024 a 17:58

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, è possibile che gli elementi o gli script utilizzati per eseguire quel filtro non siano ancora caricati/disponibili al load della pagina. Prova a mettere un temporizzatore per innescare il click:

    codice:
    // ==UserScript==
    // @name         Script
    // @version      1
    // @description  Script
    // @match        https://www.bibliotechediroma.it/opac/resource/*
    // @run-at       document-start
    // @grant        none
    // ==/UserScript==
    
    (() => {
      'use strict';
      window.addEventListener('DOMContentLoaded', () => {
        const link = document.querySelector('#biblioteche > details > ul > li.tutte > a');
        setTimeout(()=>{
          link.click();
        }, 10);
      });
    })();
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Grazie per la risposta, KillerWorm! Al momento il sito sembra offline, appena ritorna attivo ti aggiorno. Purtroppo il gestore che utilizzo per questa piattaforma, User JavaScript and CSS, non utilizza i metadati, al contrario di TamperMonkey e ViolentMonkey, che però utilizzo per altre piattaforme (fermo restando che farò una prova anche con queste estensioni). Prima utilizzavo un solo gestore, Autofill, che permetteva di attivare uno specifico profilo (relativo ad un sito o ad un insieme di script), ma ora richiede un assurdo abbonamento mensile. Si potrebbe ancora utilizzare una versione precedente, ma questa utilizza il deprecato Manifest 2, il cui supporto quest'anno sarà rimosso.
    Ultima modifica di Annuitcoeptis; 02-06-2024 a 11:10

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Nessun problema, i metadati prescindono dalla logica e dal funzionamento dello script in sé. Puoi provarlo con qualsiasi gestore.
    Fai sapere, buona domenica
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Buongiorno, tendenzialmente lo script funziona dopo il primo refresh (non sempre), ma se chiudo la scheda del browser e riapro una nuova sessione devo sempre refreshare...
    Ultima modifica di Annuitcoeptis; 03-06-2024 a 06:39

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Humm forse pesca dalla cache e magari l'evento DOMContentLoaded risulta già avvenuto quando viene applicato il listener, per cui la funzione non viene eseguita.

    Prova semplicemente a rimuovere il listener e usare il timeout dove eseguire il tutto, impostando un tempo di qualche secondo:
    codice:
    (() => {  'use strict';
      setTimeout(()=>{
        const link = document.querySelector('#biblioteche > details > ul > li.tutte > a');
        link.click();
      }, 1000);
    })();
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    Niente, funziona solo dopo refresh della pagina...

  8. #8
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    ok, ho potuto verificare ed effettivamente riscontro anche io quanto hai indicato.
    Faccio qualche prova per capire e ti aggiorno appena ho notizie.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  9. #9
    Grazie, mi piacerebe risolvere anche perchè ho un problema analogo con uno script relativo ad un popup dalla stessa piattaforma... Magari dopo lo mando in questo thread se possibile...
    Ultima modifica di Annuitcoeptis; 03-06-2024 a 15:00

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ho fatto varie prove e sono arrivato alla conclusione che il tuo script iniziale dovrebbe comunque funzionare; non riesco a riprodurre il problema che hai indicato inizialmente, cioè il fatto che funzioni solo quando viene eseguito un refresh della pagina.

    Lascia stare quanto ti ho consigliato in seguito e ripartiamo dal tuo primo script; ho solo "semplificato" la situazione in questo modo:
    codice:
    (function() {  'use strict';
      window.addEventListener('load', ()=>{
        const link = document.querySelector('#biblioteche > details > ul > li.tutte > a');
        link.click();
      });
    })();

    In sostanza non c'è bisogno di eseguire i 2 click sugli elementi in questione (i filtri di cui parli), basta solo eseguire il click sull'elemento finale dal momento che è già presente nella pagina (anche se non visibile).

    Ora, fammi capire se così ottieni lo stesso problema da te descritto inizialmente.

    Ti spiego in breve le mie considerazioni.

    Dalle prove che ho fatto ho potuto riscontrare che l'elemento è già presente nel DOM del codice HTML sorgente (quindi non viene aggiunto alla pagina successivamente in modo dinamico, ad esempio quando si clicca sul primo filtro, ma è già lì) per cui è possibile manipolarlo non appena il DOM viene caricato e risulta pronto.
    Per tale motivo avevo impostato un listener per l'evento "DOMContentLoaded", perché questo evento avviene appunto quando il DOM della pagina risulta disponibile, al contrario dell'evento "load" per il quale, oltre ad attendere il caricamento del DOM, viene attesa anche la conclusione del caricamento per tutte le risorse esterne (compresi gli script).

    Indagando meglio però ho potuto constatare che quel click va ad interpellare il metodo di un oggetto che viene incluso proprio attraverso il caricamento di uno script esterno, un certo scheda.localizzazioni.select().
    Questo oggetto (e relativo metodo) potrebbe quindi risultare non ancora disponibile quando l'elemento link lo è, perché magari il relativo script non è ancora stato caricato. Ecco perché a questo punto il metodo load (da te usato nel tuo primo script) risulterebbe quello più appropriato in questo caso.

    Ma a questo punto non mi spiego perché con quel tuo script iniziale tu stia riscontrando quel problema.
    Alla luce di quanto ho appurato proviamo quindi a semplificare, come ti ho indicato qui, e capire cosa avviene.
    Teoricamente dovresti ottenere lo stesso problema iniziale; dammi però un eventuale riscontro e nel caso facciamo assieme delle ulteriori verifiche.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.