Come posso ispezionare l'elemento che scompare in un browser?


153

Come posso ispezionare un elemento che scompare quando il mouse si allontana? Esempio di menu a discesa che scompare

Non so sia ID, classe o altro, ma voglio controllarlo.

Soluzioni che ho provato:

Esegui il selettore jQuery all'interno della console $('*:contains("some text")')ma non ha avuto fortuna principalmente perché l'elemento non è nascosto ma probabilmente rimosso dall'albero DOM.

L'ispezione manuale dell'albero DOM per le modifiche non mi dà nulla in quanto sembra essere troppo veloce per notare cosa sono cambiati.

SUCCESSO:

Ho avuto successo con i breakpoint dell'evento. In particolare, il mousedown nel mio caso. Vai a Sources-> Event Listener Breakpoints-> Mouse-> mousedownin Chrome. Dopo di che ho cliccato sull'elemento che volevo ispezionare e all'interno Scope Variablesho visto alcune indicazioni utili.


2
La tua domanda mi ha aiutato anche se non sono riuscito a raggiungere il punto di interruzione usando i sorgenti, ho eseguito il seguente script nella console: document.body.addEventListener('mouseup',function(){ debugger; })Mi ha fatto fare una pausa e ho potuto ispezionare gli elementi creati.
HMR,

Sei forte. Aveva questo esatto problema con un controllo React-Select, in cui non riuscivo a visualizzare l'HTML degli elementi dell'elenco perché la sottostruttura veniva eliminata ogni volta che facevo clic. Necessari gli ID degli articoli per automatizzare i clic utilizzando Selenium. Grazie!
araisbec,

Risposte:


177

(Questa risposta si applica solo agli Strumenti per sviluppatori di Chrome. Vedi l'aggiornamento di seguito.)

Trova un elemento che contiene l'elemento che scompare. Fai clic destro sull'elemento e applica "Interrompi su ...> Modifiche sottostruttura". Ciò genererà una pausa del debugger prima che scompaia l'elemento, che ti consentirà di interagire con l'elemento in uno stato di pausa.

inserisci qui la descrizione dell'immagine

Aggiornamento 22 ottobre 2019: con il rilascio di v. 70, sembra che FireFox alla fine supporti questo tipo di debug 2 3 :

inserisci qui la descrizione dell'immagine


1
Per evitare qualche possibile confusione, il debugger si interromperà quando si attiva l'evento, ovvero digitando il nome di un luogo. Quando lo schermo viene messo in pausa, premi il pulsante di riproduzione sul DOM stesso e sarai in grado di attivare l'evento.
Dylan Pierce,

Questo non funziona se la pagina ha acquisito il clic con il tasto destro e fa proprio il clic con il tasto destro.
Michael

Questo non funziona per la prima delle due finestre di dialogo nello stesso contenitore
Still_learning del

@Still_learning Puoi spiegare cosa intendi con "due dialoghi nello stesso contenitore".
arxpoetica,

<v-container><v-dialog></v-dialog><v-dialog></v-dialog></v-container>- nel mio caso la prima finestra di dialogo viene visualizzata solo fino all'arrivo dei dati dal db, circa 1 secondo
Still_learning

92

Un metodo alternativo in Chrome:

  • Apri devTools (F12).
  • Seleziona la scheda "Fonti".
  • Mentre viene visualizzato l'elemento desiderato, premere F8 (o Ctrl + /). Ciò interromperà l'esecuzione dello script e "congelerà" il DOM esattamente come viene visualizzato.
  • Da questo punto, usa Ctrl + Maiusc + C per selezionare l'elemento.

3
Perfetto!! Questo fa esattamente quello che volevo
Daniel Loiterton

2
Ho notato che funziona solo quando hai già gli strumenti di sviluppo nella scheda "Sorgenti".
hbulens

3
blocca l'esecuzione del codice ma l'elemento è ancora scomparso (sto usando React).
Lorem Ipsum Dolor,

Il mio Chrome dice F8 o Crtl + \ (non Crtl + /). Inoltre, Crtl + \ non funziona nel mio caso ...
Roger Veciana,

Questo non funziona sui pop-up di controllo video di Google ... il controllo sembra svanire alla vista non appena si preme il tasto e si è completamente sbiadito prima che si verifichi il blocco.
Michael

18
  1. Apri la console
  2. Digitare setTimeout(()=>{debugger;},5000);
  3. premere Invio

Ora hai 5 secondi per far apparire il tuo elemento. Una volta apparso, attendi che il debugger colpisca. Finché non riprendi, puoi giocare con il tuo elemento e non scomparirà.


Suggerimento utile per evitare di ripetere questi passaggi sopra ogni volta:

aggiungi questo come bookmarklet:

  1. Aggiungi qualsiasi pagina ai segnalibri
  2. Modifica questo nuovo segnalibro
  3. Sostituisci l'URL / posizione con: javascript:(function(){setTimeout(()=>{debugger;},5000);})();

La prossima volta che desideri utilizzarlo, fai clic / tocca questo segnalibro.


1
Questo è il modo più rapido e stabile per eseguire il debug degli elementi scomparsi ^
warmwhisky

8

Sto usando Chrome su Mac lì ho seguito i passaggi sopra ma cercherò di spiegare un po 'di più:

  1. Fare clic con il tasto destro e andare a ispezionare l'elemento.
  2. Vai alla scheda fonti.
  3. Quindi passa con il mouse sull'elemento.
  4. Quindi utilizzando la tastiera F8 o Command(Window) \ . Metterà in pausa lo schermo in uno stato statico e l'elemento non scomparirà al passaggio del mouse.

1
Grazie, grazie, per le istruzioni dettagliate! Dopo uno spettacolo di estrema destrezza - facendo clic su un pulsante, premendo Ctr + Shift + C, muovendo il mouse per passare il mouse sopra l'elemento e premendo F8nello spazio di un secondo e mezzo - Finalmente ho ottenuto il mio elemento in modalità ispezionabile
Still_learning

2

In Firebug ci sono diverse soluzioni per questo:

  1. Puoi usare Break On Mutate nel pannello HTML. (con questo sarai anche in grado di scoprire quale elemento è)
  2. Puoi fare clic con il pulsante destro del mouse sull'elemento e scegliere Ispeziona elemento con Firebug

Inoltre, potresti voler seguire il numero 551 , che chiede un modo per bloccare temporaneamente eventi specifici.

Modificare:

Per scoprire quale elemento è, puoi anche abilitare le opzioni del pannello HTML Evidenzia modifiche , Espandi modifiche e Scorri modifiche nella vista per rendere visibile l'elemento all'interno del pannello HTML.

Sebastian


Anche Chrome ha un buon ispettore. Il problema è: il tasto destro del mouse sull'elemento lo fa scomparire nel mio caso. Chrome ha anche la mutazione Break on DOM. Il problema con questo - non so quale sia l'elemento dato che è generato dinamicamente
lukas.pukenis,

1
Ho appena modificato la mia risposta per dare un suggerimento su come conoscere quale elemento è.
Sebastian Zartner,

2

Nel mio caso, ho usato l' opzione Espandi ricorsivamente su Google Chrome:

I passaggi sono:

  1. Ispeziona il campo a discesa
  2. Trova il DOM dinamico (l'evidenziazione viola)
  3. Fare clic con il tasto destro del mouse su quel DOM dinamico
  4. Scegli Espandi in modo ricorsivo : inserisci qui la descrizione dell'immagine
  5. Possiamo vedere che ci sono tutti gli elementi

Ecco una demo:

inserisci qui la descrizione dell'immagine


2

Passa il mouse sopra l'elemento con il mouse e premi F8 (questo in Chrome) per mettere in pausa l'esecuzione dello script. Lo stato al passaggio del mouse rimarrà visibile per te.

Ti porta alla scheda fonti. Torna alla scheda Elementi. Questo codice temporale non scomparirà.


0

puoi visualizzare gli elementi che appaiono e scompaiono nella finestra di ispezione sotto gli elementi. Se navighi verso l'elemento quando è visibile, dovresti essere in grado di vederlo scomparire o vedere il suo CSS cambiare quando cambia stato.

Ciò è possibile con firebug in Firefox o l'ispettore incorporato in Chrome.


1
Sì. Ho affermato che i cambiamenti avvengono troppo velocemente in DOM e la pagina modifica fortemente il DOM, quindi non è davvero una soluzione in quanto non sono in grado di distinguere i miei elementi necessari da una serie di modifiche ovunque :)
lukas.pukenis,

potresti provare a tracciare cosa sta succedendo usando console.log, ad esempio all'inizio della funzione che stai cercando di controllare, puoi visualizzare l'oggetto css ecc. O rallentare le modifiche finché non sai che funzionano correttamente e quindi cambiare la velocità in voglio che sia, ad esempio, hide ('slow') in jquery
matpol,

Il problema è - non è la mia base di codice, è una legacy, grande, vecchia, base di codice in cui una semplice ricerca tra i file non mi dà niente .. :)
lukas.pukenis,

puoi anche vedere quali file vengono utilizzati dalla pagina nella finestra di ispezione. Vorrei passare rimuoverli fino a quando non si rompe, quindi cercare il file che lo ha rotto e passare da lì. Puoi sempre cercare anche i file effettivi.
matpol,


0

ho avuto lo stesso problema ma utilizzo Firefox scompare non appena apro inspect element trova una soluzione: apri i 4 trattini (impostazioni) vai su web developer> Debugger e premi immediatamente F8 che è la scorciatoia per la pausa che interrompe lo script prima di dare il via e rilevare che hai aperto gli strumenti per gli sviluppatori

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.