Kaybolan öğeyi bir tarayıcıda nasıl inceleyebilirim?


164

Farem uzaklaştığında kaybolan bir öğeyi nasıl inceleyebilirim? Kaybolan örnek açılır menü

Kimlik, sınıf veya başka bir şey olduğunu bilmiyorum ama incelemek istiyorum.

Denediğim çözümler:

JQuery selector'ı konsolun içinde çalıştırın, $('*:contains("some text")')ancak hiç şansınız olmadı çünkü öğe gizli değil ama muhtemelen DOM ağacından kaldırılmış.

DOM ağacını değişiklikler için manuel olarak incelemek bana hiçbir şey vermiyor, çünkü neyin değiştiğini fark etmek için çok hızlı görünüyor.

BAŞARI:

Etkinlik kesme noktaları konusunda başarılı oldum. Özellikle - benim durumumda fare aşağı. Sources-> Event Listener Breakpoints-> Mouse-> mousedownChrome'a gitmeniz yeterli . Ondan sonra incelemek istediğim öğeyi tıkladım ve içinde Scope Variablesbazı yararlı talimatlar gördüm.


2
Kaynakları kullanarak kesme noktasına ulaşamasam da sorunuz yardımcı oldu, konsolda aşağıdaki komut dosyasını çalıştırdım: document.body.addEventListener('mouseup',function(){ debugger; })Bu beni ara verdi ve oluşturulan öğeleri inceleyebildim.
HMR

Harikasın. Bir React-Select kontrolüyle tam olarak bu sorunu yaşadım, burada liste öğelerinin HTML'sini görüntüleyemiyordum çünkü alt ağaç, tıkladığımda silerdi. Selenium kullanarak tıklamaları otomatikleştirmek için öğe kimliklerine ihtiyaç vardı. Teşekkürler!
araisbec

Yanıtlar:


187

(Bu cevap yalnızca Chrome Geliştirici Araçları için geçerlidir. Aşağıdaki güncellemeye bakın.)

Kaybolan öğeyi içeren bir öğe bulun. Öğeye sağ tıklayın ve "Kes ...> Alt Ağaç Değişiklikleri" ni uygulayın. Bu, öğe kaybolmadan önce bir hata ayıklayıcıyı duraklatır ve bu, duraklatılmış bir durumda öğeyle etkileşim kurmanıza olanak tanır.

görüntü açıklamasını buraya girin

22 Ekim 2019 güncellemesi: 70. sürümün yayınlanmasıyla birlikte, FireFox sonunda bu tür hata ayıklamayı 2 3 destekliyor gibi görünüyor :

görüntü açıklamasını buraya girin

15 Eylül 2020 Güncellemesi: Chrome, tam da bu ihtiyaç için bir "Odaklanmış bir sayfayı taklit et" seçeneğine sahiptir (bunu [⌘] + [P] Komut Menüsünden veya Genel Tercihlerden edinebilirsiniz). 5 - h / t @sulco Twitter'da


1
Olası bir karışıklığı önlemek için - siz olayı tetiklerken, diğer bir deyişle bir yer adı yazarken hata ayıklayıcı duracaktır. Ekran durakladığında, DOM'un kendisindeki oynat düğmesine basın ve etkinliği tetikleyebileceksiniz.
Dylan Pierce

Bu, sayfa sağ tıklamayı yakaladıysa ve sağ tıklamayla kendi işini yapıyorsa çalışmaz.
Michael

Bu, aynı kapsayıcıdaki iki iletişim
kutusunun ilki için çalışmaz

@Still_learning "Aynı kapta iki diyalog" ile ne demek istediğinizi açıklayabilir misiniz?
arxpoetica

<v-container><v-dialog></v-dialog><v-dialog></v-dialog></v-container>- benim durumumda, ilk iletişim kutusu yalnızca veri
db'den

99

Chrome'da alternatif bir yöntem:

  • DevTools'u açın (F12).
  • "Kaynaklar" sekmesini seçin.
  • İstediğiniz öğe görüntülenirken F8'e (veya Ctrl + /) basın. Bu, komut dosyasının çalışmasını kesecek ve DOM'u tam olarak görüntülendiği gibi "donduracaktır".
  • Bu noktadan sonra, öğeyi seçmek için Ctrl + Shift + C tuşlarını kullanın.

3
Mükemmel!! Bu tam olarak istediğim şeyi yapıyor
Daniel Loiterton

2
Bunun yalnızca geliştirici araçları "Kaynaklar" sekmesinde zaten açılmışsa işe yaradığını fark ettim.
hbulens

4
kodu yürütmeden dondurur, ancak öğe hala kayboldu (React kullanıyorum).
Metropolis

Chrome'um F8 veya Crtl + \ (Crtl + / değil) diyor. Ayrıca, Crtl + \ benim durumumda çalışmıyor ...
Roger Veciana

Bu does not kontrol anahtarı isabet kısa sürede görünümden solmaya görünür ve dondurma oluşmadan önce tamamen yok olup gitti ... Google Video kontrol pop-up üzerinde çalışmaya.
Michael

25
  1. Konsolu aç
  2. Yazın setTimeout(()=>{debugger;},5000);
  3. Enter tuşuna basın

Artık elementinizin görünmesi için 5 saniyeniz var. Göründüğünde, hata ayıklayıcıya ulaşana kadar bekleyin. Devam etmediğiniz sürece, elementinizle oynayabilirsiniz ve kaybolmaz.


Yukarıdaki adımları her seferinde tekrarlamaktan kaçınmak için faydalı bir ipucu:

bunu yer imi olarak ekleyin:

  1. Herhangi bir sayfayı yer imlerine ekleyin
  2. Bu yeni yer işaretini düzenleyin
  3. URL'yi / konumu şununla değiştirin: javascript:(function(){setTimeout(()=>{debugger;},5000);})();

Bir dahaki sefere bunu kullanmak istediğinizde, bu yer işaretine tıklayın / dokunun.


4
Bu, kaybolan öğelerde hata ayıklamanın en hızlı ve en kararlı yoludur ^
warmwhisky

1
Bu gerçekten iyi! Bunu düşünmediğim için kızgınım
Louis

8

Mac'te chrome kullanıyorum, yukarıdaki adımları izledim ancak biraz daha açıklamaya çalışacağım:

  1. Sağ tıklayın ve öğeyi inceleyin.
  2. Kaynaklar sekmesine gidin.
  3. Ardından öğenin üzerine gelin.
  4. Ardından klavyeyi F8 veya kullanarak Command(Window) \. Ekranı statik bir durumda duraklatacak ve öğenin üzerine gelindiğinde kaybolmayacaktır.

1
Ayrıntılı talimatlar için teşekkür ederim, teşekkürler! Aşırı el becerisi gösterisinden sonra - bir düğmeyi tıklama, basma Ctr + Shift + C, öğenin üzerine gelmek için fareyi hareket ettirme F8ve bir buçuk saniye içinde basma - nihayet
öğemi incelenebilir

2

Firebug'da bunun için farklı çözümler vardır:

  1. HTML panelinin içinde Break On Mutate'i kullanabilirsiniz . (bununla, hangi element olduğunu da öğrenebileceksiniz)
  2. Öğeye sağ tıklayıp Firebug ile Öğeyi İncele'yi seçebilirsiniz.

Ayrıca , belirli olayları geçici olarak engellemenin bir yolunu arayan 551 numaralı sorunu takip etmek isteyebilirsiniz .

Düzenle:

O da etkinleştirebilirsiniz hangi eleman öğrenmek için HTML paneli seçenekleri Değişiklikleri vurgulayın , Değişiklikleri Expand ve Kaydırma Değişiklikleri içine Görünümü HTML paneli içindeki eleman görünür kılmak için.

Sebastian


Chrome da iyi bir denetçiye sahiptir. Sorun şu ki - öğeye sağ tıklama benim durumumda kaybolmasına neden oluyor. Chrome'da ayrıca DOM mutasyonu üzerinde Break var. Bununla ilgili problem - dinamik olarak oluşturulmuş olduğu için hangi element olduğunu bilmiyorum
lukas.pukenis

1
Cevabımı, hangi öğe olduğunu nasıl anlayacağıma dair bir ipucu vermek için düzenledim.
Sebastian Zartner

2

Benim durumumda, google chrome'da yinelemeli olarak genişlet seçeneğini kullandım :

Adımlar:

  1. Açılır alanı inceleyin
  2. Dinamik DOM'u (mor vurgu) bulun
  3. Bu dinamik DOM'a sağ tıklayın
  4. Yinelemeli olarak Genişlet'i seçin : görüntü açıklamasını buraya girin
  5. Tüm unsurların orada olduğunu görebiliriz

İşte bir demo:

görüntü açıklamasını buraya girin


2

Komut dosyasının yürütülmesini duraklatmak için farenizle öğenin üzerine gelin ve F8'e (Chrome'da bu) basın. Fareyle üzerine gelme durumu size görünür durumda kalacaktır.

Sizi kaynaklar sekmesine götürür. Öğeler sekmesine geri dönün. Bu zaman kodu ortadan kalkmayacaktır.


0

Denetçide görünen ve kaybolan öğeleri öğeler altında görüntüleyebilirsiniz. Öğeye görünür olduğunda giderseniz, kaybolduğunu veya durumu değiştiğinde css'sinin değiştiğini görebilmeniz gerekir.

Bu, firefox'ta firebug veya chrome'da yerleşik denetçi ile mümkündür.


1
Evet. DOM'da değişikliklerin çok hızlı gerçekleştiğini ve sayfanın DOM'u yoğun bir şekilde değiştirdiğini belirttim, bu nedenle gerekli
öğelerimi

console.log'u kullanarak neler olup bittiğini izlemeyi deneyebilirsiniz, örneğin, kontrol etmeye çalıştığınız işlevin başlangıcında, nesne css'i görüntüleyebilirsiniz. Ya da, düzgün çalıştıklarını anlayana kadar değişiklikleri yavaşlatın ve ardından hızı, istediğiniz gibi değiştirin. örneğin
jquery'de

Sorun şu ki - bu benim kod
tabanım

Sayfa tarafından hangi dosyaların kullanıldığını denetçide de görüntüleyebilirsiniz. Kırılana kadar onları kaldırmaya giderdim, sonra onu kıran dosyaya bakar ve oradan giderdim. Her zaman gerçek dosyaları da arayabilirsiniz.
matpol


0

aynı sorunu yaşadım ama Firefox kullanıyorum, denetleme öğesini açar açmaz kayboluyor: 4 çizgiyi (ayarlar) açın, web geliştiricisine gidin> Hata Ayıklayıcı'ya gidin ve hemen komut dosyasını durduran duraklamanın kısayolu olan F8'e basın geliştirici araçlarını açtığınızı algılamadan önce

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.