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.


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


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.

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.


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.

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


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


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.


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.


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.