Jak mogę sprawdzić znikający element w przeglądarce?

152

Jak mogę sprawdzić element, który znika, gdy moja mysz się oddala? Przykładowe menu rozwijane, które znika

Nie wiem, czy to identyfikator, klasa czy coś, ale chcę to sprawdzić.

Rozwiązania, które wypróbowałem:

Uruchom selektor jQuery w konsoli, $('*:contains("some text")')ale nie miałem szczęścia, głównie dlatego, że element nie jest ukryty, ale prawdopodobnie usunięty z drzewa DOM.

Ręczna inspekcja drzewa DOM pod kątem zmian nie daje mi nic, ponieważ wydaje mi się, że jest po prostu zbyt szybko, aby zauważyć, co się zmieniło.

SUKCES:

Odniosłem sukces z punktami przerwania zdarzeń. A konkretnie - w moim przypadku mousedown. Po prostu przejdź do Sources-> Event Listener Breakpoints-> Mouse-> mousedownw Chrome. Następnie kliknąłem element, który chciałem sprawdzić, a wewnątrz Scope Variableszobaczyłem kilka przydatnych wskazówek.

lukas.pukenis
źródło
2
Twoje pytanie pomogło, chociaż nie dostałem się do punktu przerwania używając źródeł, wykonałem następujący skrypt w konsoli: document.body.addEventListener('mouseup',function(){ debugger; })To mnie przerwało i mogłem przyjrzeć się utworzonym elementom.
HMR,
Rządzisz. Miałem dokładnie ten problem z kontrolką React-Select, w której nie mogłem wyświetlić kodu HTML elementów listy, ponieważ poddrzewo usuwałoby się za każdym razem, gdy kliknąłem. Potrzebny był identyfikator przedmiotu, aby zautomatyzować kliknięcia przy użyciu Selenium. Dzięki!
araisbec

Odpowiedzi:

177

(Ta odpowiedź dotyczy tylko Narzędzi Chrome dla programistów. Zobacz aktualizację poniżej).

Znajdź element, który zawiera znikający element. Kliknij prawym przyciskiem myszy element i zastosuj „Przerwij na ...> Modyfikacje poddrzewa”. Spowoduje to wstrzymanie debugera, zanim element zniknie, co pozwoli na interakcję z elementem w stanie wstrzymania.

wprowadź opis obrazu tutaj

Aktualizacja z 22 października 2019 r .: wraz z wydaniem wersji 70 wygląda na to, że FireFox wreszcie obsługuje ten rodzaj debugowania 2 3 :

wprowadź opis obrazu tutaj

arxpoetica
źródło
1
Aby uniknąć możliwych nieporozumień - debugger zatrzyma się, gdy wyzwalasz zdarzenie, czyli wpisywanie nazwy miejsca. Gdy ekran się zatrzyma, po prostu naciśnij przycisk odtwarzania na samym DOM, a będziesz mógł wywołać zdarzenie.
Dylan Pierce
To nie działa, jeśli strona przechwyciła kliknięcie prawym przyciskiem myszy i robi swoje po kliknięciu prawym przyciskiem myszy.
Michael
Nie działa to w przypadku pierwszego z dwóch okien dialogowych w tym samym kontenerze
Still_learning
@Still_learning Czy możesz wyjaśnić, co masz na myśli, mówiąc „dwa okna dialogowe w tym samym kontenerze”?
arxpoetica
<v-container><v-dialog></v-dialog><v-dialog></v-dialog></v-container>- w moim przypadku pierwsze okno dialogowe wyświetla się tylko do momentu nadejścia danych z
bazy
92

Alternatywna metoda w Chrome:

  • Otwórz devTools (F12).
  • Wybierz kartę „Źródła”.
  • Gdy żądany element jest wyświetlony, naciśnij klawisz F8 (lub Ctrl + /). Spowoduje to przerwanie wykonywania skryptu i „zamrożenie” modelu DOM dokładnie tak, jak jest wyświetlany.
  • Od tego momentu użyj Ctrl + Shift + C, aby zaznaczyć element.
Joseph Tinoco
źródło
3
Idealny!! Robi dokładnie to, czego chciałem
Daniel Loiterton
2
Zauważyłem, że działa to tylko wtedy, gdy masz już otwarte narzędzia programistyczne na karcie „Źródła”.
hbulens
3
zamraża kod przed wykonaniem, ale element nadal zniknął (używam React).
Lorem Ipsum Dolor
Mój Chrome mówi F8 lub Crtl + \ (nie Crtl + /). Również Crtl + \ nie działa w moim przypadku ...
Roger Veciana
To nie działa w wyskakujących okienkach sterowania wideo Google ... kontrolka wydaje się znikać z widoku, gdy tylko naciśniesz klawisz, i całkowicie zniknęła, zanim nastąpi zamrożenie.
Michael
18
  1. Otwórz konsolę
  2. Wpisz setTimeout(()=>{debugger;},5000);
  3. naciśnij enter

Teraz masz 5 sekund, aby pojawił się element. Gdy się pojawi, poczekaj, aż debugger zadziała. Dopóki nie wznowisz gry, możesz bawić się swoim żywiołem i nie zniknie.


Przydatna wskazówka, aby za każdym razem unikać powtarzania powyższych kroków:

dodaj to jako bookmarklet:

  1. Dodaj dowolną stronę do zakładek
  2. Edytuj tę nową zakładkę
  3. Zastąp adres URL / lokalizację: javascript:(function(){setTimeout(()=>{debugger;},5000);})();

Następnym razem, gdy będziesz chciał tego użyć, po prostu kliknij / dotknij tej zakładki.

Mojtaba
źródło
1
To najszybszy i najbardziej stabilny sposób debugowania znikających elementów ^
warmwhisky
8

Używam Chrome na Macu. Wykonałem powyższe kroki, ale spróbuję wyjaśnić trochę więcej:

  1. Kliknij prawym przyciskiem myszy i przejdź do sprawdzenia elementu.
  2. Przejdź do zakładki źródeł.
  3. Następnie umieść kursor na elemencie.
  4. Następnie za pomocą klawiatury F8 lub Command(Window) \ . Spowoduje zatrzymanie ekranu w stanie statycznym, a element nie zniknie po najechaniu kursorem.
Czarna Mamba
źródło
1
Dziękuję, dziękuję za szczegółowe instrukcje! Po pokazie niezwykłej zręczności - kliknięciu przycisku, naciśnięciu Ctr + Shift + C, przesunięciu myszy w celu najechania kursorem na element i naciśnięciu F8w ciągu półtorej sekundy - w końcu dostałem swój element w tryb
sprawdzalny
2

W Firebug istnieją różne rozwiązania tego problemu:

  1. Możesz użyć Break On Mutate w panelu HTML. (dzięki temu będziesz mógł również dowiedzieć się, który to element)
  2. Możesz kliknąć element prawym przyciskiem myszy i wybrać opcję Zbadaj element za pomocą Firebuga

Możesz również zapoznać się z wydaniem 551 , w którym prosi się o czasowe blokowanie określonych wydarzeń.

Edytować:

Aby dowiedzieć się, który to element, możesz również włączyć opcje panelu HTML Podświetl zmiany , Rozwiń zmiany i Przewiń zmiany do widoku, aby element był widoczny w panelu HTML.

Sebastian

Sebastian Zartner
źródło
Chrome również ma przyzwoitego inspektora. Problem w tym, że kliknięcie prawym przyciskiem na element powoduje, że w moim przypadku znika. Chrome ma również przerwę przy mutacji DOM. Problem z tym - nie wiem, który to element, ponieważ jest generowany dynamicznie
lukas.pukenis
1
Właśnie zredagowałem odpowiedź, aby dać wskazówkę, jak dowiedzieć się, który to element.
Sebastian Zartner
2

W moim przypadku użyłem opcji Rozwiń rekurencyjnie w Google Chrome:

Kroki są następujące:

  1. Sprawdź rozwijane pole
  2. Znajdź dynamiczny DOM (fioletowe podświetlenie)
  3. Kliknij prawym przyciskiem myszy ten dynamiczny DOM
  4. Wybierz Rozwiń rekurencyjnie : wprowadź opis obrazu tutaj
  5. Widzimy, że są tam wszystkie elementy

Oto demo:

wprowadź opis obrazu tutaj

Raja David
źródło
2

Najedź myszą na element i naciśnij klawisz F8 (w Chrome), aby wstrzymać wykonywanie skryptu. Stan najechania pozostanie widoczny dla Ciebie.

Zabierze Cię do karty źródeł. Wróć do zakładki Elementy. Ten kod czasowy nie zniknie.

Vivekanand Panda
źródło
0

możesz zobaczyć elementy pojawiające się i znikające w inspektorze pod elementami. Jeśli przejdziesz do elementu, gdy jest on widoczny, powinieneś być w stanie zobaczyć, jak znika lub zobaczyć zmianę css, gdy zmienia się stan.

Jest to możliwe dzięki firebug w Firefoksie lub wbudowanemu inspektorowi w chrome.

matpol
źródło
1
Tak. Stwierdziłem, że zmiany zachodzą zbyt szybko w DOMu, a strona mocno modyfikuje DOM, więc to naprawdę nie jest rozwiązanie, ponieważ nie jestem w stanie odróżnić moich potrzebnych elementów od wielu modyfikacji wszędzie :)
lukas.pukenis
możesz spróbować prześledzić co się dzieje za pomocą console.log np. na początku funkcji, którą próbujesz sprawdzić możesz wyświetlić obiekt css itd. Lub spowolnij zmiany, aż będziesz wiedział, że działają poprawnie, a następnie zmień prędkość na to, co chcesz chcę, żeby było np. hide ('wolno') w jquery
matpol
Problem w tym, że to nie jest moja własna baza kodów, to starsza, duża, stara baza kodów, w której proste przeszukiwanie plików nic mi nie daje .. :)
lukas.pukenis
możesz również zobaczyć, jakie pliki są używane przez stronę w inspektorze. Przechodziłbym przez ich usuwanie, aż się zepsuje, a następnie zaglądałem do pliku, który go zepsuł i stamtąd. Zawsze możesz też przeszukać rzeczywiste pliki.
matpol
2
co powiesz na to: stackoverflow.com/questions/10213703/ ...
matpol
0

Miałem ten sam problem, ale używam Firefoksa, który znika, gdy tylko otworzę, sprawdź element znalazł rozwiązanie: otwórz 4 myślniki (ustawienia) przejdź do programisty internetowego> Debugger i natychmiast naciśnij F8, który jest skrótem do pauzy zatrzymującej skrypt zanim kopie i wykryje, że otworzyłeś narzędzia programistyczne

Hani Yassine
źródło