ฉันจะตรวจสอบองค์ประกอบที่หายไปในเบราว์เซอร์ได้อย่างไร


152

ฉันจะตรวจสอบองค์ประกอบที่หายไปเมื่อเลื่อนเมาส์ไปได้อย่างไร ตัวอย่างแบบเลื่อนลงที่หายไป

ฉันไม่รู้ว่าเป็น ID คลาสหรืออะไร แต่ต้องการตรวจสอบ

วิธีแก้ปัญหาที่ฉันได้ลอง:

เรียกใช้ตัวเลือก jQuery ภายในคอนโซล$('*:contains("some text")')แต่ไม่มีโชคใด ๆ เป็นส่วนใหญ่เนื่องจากองค์ประกอบไม่ถูกซ่อน แต่อาจถูกลบออกจากต้นไม้ DOM

การตรวจสอบต้นไม้ DOM ด้วยตนเองสำหรับการเปลี่ยนแปลงทำให้ฉันไม่มีอะไรเลยดูเหมือนเร็วเกินไปที่จะสังเกตเห็นว่ามีการเปลี่ยนแปลงอะไร

ความสำเร็จ:

ฉันประสบความสำเร็จกับจุดพักเหตุการณ์ โดยเฉพาะ - mousedown ในกรณีของฉัน เพิ่งไปที่Sources-> Event Listener Breakpoints-> Mouse-> mousedownใน Chrome หลังจากนั้นฉันคลิกองค์ประกอบที่ฉันต้องการตรวจสอบภายในScope Variablesฉันเห็นทิศทางที่เป็นประโยชน์


2
คำถามของคุณช่วยแม้ว่าฉันจะไม่ได้ใช้เบรกพอยต์โดยใช้แหล่งที่มา แต่ฉันรันสคริปต์ต่อไปนี้ในคอนโซล: document.body.addEventListener('mouseup',function(){ debugger; })นั่นทำให้ฉันหยุดพักและฉันสามารถตรวจสอบองค์ประกอบที่สร้างขึ้นได้
HMR

คุณร็อค มีปัญหาที่แน่นอนนี้ด้วยการควบคุมเลือกตอบที่ฉันไม่สามารถดู HTML ของรายการได้เนื่องจากทรีย่อยจะลบเมื่อใดก็ตามที่ฉันคลิกไป ต้องการรหัสรายการเพื่อทำการคลิกโดยอัตโนมัติโดยใช้ซีลีเนียม ขอบคุณ!
araisbec

คำตอบ:


177

(คำตอบนี้ใช้ได้กับเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome เท่านั้นดูอัปเดตด้านล่าง)

ค้นหาองค์ประกอบที่มีองค์ประกอบที่หายไป คลิกขวาที่องค์ประกอบแล้วใช้ "หยุดพักที่ ... > การปรับเปลี่ยนย่อย" การทำเช่นนี้จะเป็นการหยุดตัวดีบักก่อนที่องค์ประกอบจะหายไปซึ่งจะช่วยให้คุณสามารถโต้ตอบกับองค์ประกอบในสถานะที่หยุดชั่วคราว

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดต 22 ต.ค. 2019:ด้วยการเปิดตัว v. 70 ดูเหมือนว่าในที่สุด FireFox จะรองรับการแก้ไขข้อบกพร่องประเภทนี้2 3 :

ป้อนคำอธิบายรูปภาพที่นี่


1
เพื่อหลีกเลี่ยงความสับสนที่อาจเกิดขึ้นได้ - ดีบั๊กจะหยุดชั่วคราวเมื่อคุณเรียกใช้งานกิจกรรมหรือพิมพ์ชื่อสถานที่ เมื่อหน้าจอหยุดชั่วคราวเพียงกดปุ่มเล่นบน DOM และคุณจะสามารถเรียกใช้เหตุการณ์ได้
Dylan Pierce

วิธีนี้ใช้ไม่ได้หากหน้าดังกล่าวจับภาพคลิกขวาและทำหน้าที่เป็นคลิกขวาด้วยตัวเอง
Michael

สิ่งนี้ใช้ไม่ได้กับไดอะล็อกแรกของสองไดอะล็อกในคอนเทนเนอร์เดียวกัน
Still_learning

@Still_learning คุณสามารถอธิบายสิ่งที่คุณหมายถึงโดย "สองกล่องโต้ตอบในภาชนะเดียวกัน"
arxpoetica

<v-container><v-dialog></v-dialog><v-dialog></v-dialog></v-container>- ในกรณีของฉันกล่องโต้ตอบแรกจะปรากฏขึ้นเท่านั้นจนกว่าข้อมูลจะมาจากฐานข้อมูลประมาณ 1 วินาที
Still_learning

92

วิธีอื่นใน Chrome:

  • เปิด devTools (F12)
  • เลือกแท็บ "แหล่งที่มา"
  • ในขณะที่องค์ประกอบที่คุณต้องการแสดงขึ้นให้กด F8 (หรือ Ctrl + /) การดำเนินการนี้จะหยุดการทำงานของสคริปต์และ "หยุด" DOM ​​ตรงตามที่แสดง
  • จากจุดนี้ใช้ Ctrl + Shift + C เพื่อเลือกองค์ประกอบ

3
ที่สมบูรณ์แบบ !! สิ่งนี้ทำในสิ่งที่ฉันต้องการอย่างแน่นอน
Daniel Loiterton

2
ฉันสังเกตเห็นว่าสิ่งนี้ทำงานได้เฉพาะเมื่อคุณมีเครื่องมือสำหรับนักพัฒนาเปิดขึ้นแล้วในแท็บ 'แหล่งที่มา'
hbulens

3
มันหยุดรหัสจากการทำงาน แต่องค์ประกอบยังคงหายไป (ฉันใช้ React)
Lorem Ipsum Dolor

Chrome ของฉันบอกว่า F8 หรือ Crtl + \ (ไม่ใช่ Crtl + /) นอกจากนี้ Crtl + \ ไม่สามารถใช้งานได้ในกรณีของฉัน ...
Roger Veciana

สิ่งนี้ใช้ไม่ได้กับป๊อปอัปการควบคุมวิดีโอของ Google ... ตัวควบคุมดูเหมือนจะหายไปจากการดูทันทีที่คุณกดปุ่มและจางหายไปอย่างสมบูรณ์ก่อนที่จะเกิดการหยุด
Michael

18
  1. เปิดคอนโซล
  2. พิมพ์ใน setTimeout(()=>{debugger;},5000);
  3. กดปุ่มตกลง

ตอนนี้คุณมี 5 วินาทีเพื่อให้องค์ประกอบของคุณปรากฏขึ้น เมื่อปรากฏขึ้นให้รอจนกว่าโปรแกรมดีบั๊กจะทำงาน ตราบใดที่คุณไม่กลับมาทำงานคุณสามารถเล่นกับองค์ประกอบของคุณและมันจะไม่หายไป


เคล็ดลับที่มีประโยชน์เพื่อหลีกเลี่ยงการทำซ้ำขั้นตอนข้างต้นทุกครั้ง:

เพิ่มสิ่งนี้เป็น bookmarklet:

  1. คั่นหน้าใด ๆ
  2. แก้ไขบุ๊คมาร์คใหม่นี้
  3. แทนที่ URL / ตำแหน่งด้วย: javascript:(function(){setTimeout(()=>{debugger;},5000);})();

ครั้งต่อไปที่คุณต้องการใช้สิ่งนี้เพียงแค่คลิก / แตะที่คั่นหน้านี้


1
นี่เป็นวิธีที่เร็วและเสถียรที่สุดในการดีบักองค์ประกอบที่หายไป ^
warmwhisky

8

ฉันกำลังใช้ chrome บน Mac ที่นั่นฉันได้ทำตามขั้นตอนข้างต้นแล้ว แต่ฉันจะพยายามอธิบายเพิ่มเติมอีกเล็กน้อย:

  1. คลิกขวาและไปเพื่อตรวจสอบองค์ประกอบ
  2. ไปที่แท็บแหล่งข้อมูล
  3. จากนั้นเลื่อนเมาส์ไปที่องค์ประกอบ
  4. แล้วใช้แป้นพิมพ์หรือF8 Command(Window) \มันจะหยุดหน้าจอในสถานะคงที่และองค์ประกอบจะไม่หายไปเมื่อเลื่อนเมาส์ออก

1
ขอบคุณสำหรับคำแนะนำโดยละเอียด! หลังจากการแสดงความคล่องแคล่วสุดขีด - คลิกปุ่มกดCtr + Shift + Cเลื่อนเมาส์เพื่อเลื่อนเมาส์ไปวางเหนือองค์ประกอบและกดF8ภายในระยะเวลาหนึ่งวินาทีครึ่ง - ในที่สุดฉันก็มีองค์ประกอบของฉันในโหมดตรวจสอบได้
Still_learning

2

ใน Firebug มีวิธีแก้ไขปัญหาต่าง ๆ สำหรับสิ่งนี้:

  1. คุณสามารถใช้Break On Mutateภายในแผง HTML (ด้วยสิ่งนี้คุณจะสามารถค้นหาองค์ประกอบที่เป็น)
  2. คุณสามารถคลิกขวาที่องค์ประกอบและเลือกตรวจสอบองค์ประกอบด้วย Firebug

นอกจากนี้คุณอาจต้องการติดตามปัญหา 551ซึ่งขอวิธีในการบล็อกเหตุการณ์เฉพาะชั่วคราว

แก้ไข:

เพื่อหาที่องค์ประกอบที่เป็นคุณยังสามารถเปิดใช้งานตัวเลือกแผง HTML เน้นการเปลี่ยนแปลง , ขยายการเปลี่ยนแปลงและเลื่อนการเปลี่ยนแปลงในมุมมองที่จะทำให้องค์ประกอบที่มองเห็นภายในแผงของ HTML

เซบาสเตียน


Chrome ก็มีผู้ตรวจสอบที่ดีเช่นกัน ปัญหาคือ - คลิกขวาที่องค์ประกอบทำให้มันหายไปในกรณีของฉัน Chrome ยังมีการกลายพันธุ์ใน DOM ปัญหาเกี่ยวกับสิ่งนี้ - ฉันไม่ทราบว่าองค์ประกอบใดเป็นอย่างที่มันถูกสร้างขึ้นแบบไดนามิก
lukas.pukenis

1
ฉันเพิ่งแก้ไขคำตอบของฉันเพื่อบอกใบ้ให้รู้ว่าเป็นองค์ประกอบใด
Sebastian Zartner

2

ในกรณีของฉันฉันใช้ตัวเลือกขยายซ้ำบน Google chrome:

ขั้นตอนคือ:

  1. ตรวจสอบฟิลด์แบบเลื่อนลง
  2. ค้นหา DOM แบบไดนามิก (ไฮไลต์สีม่วง)
  3. คลิกเมาส์ขวาบน DOM ไดนามิกนั้น
  4. เลือกขยายแบบเรียกซ้ำ : ป้อนคำอธิบายรูปภาพที่นี่
  5. เราสามารถเห็นองค์ประกอบทั้งหมดอยู่ที่นั่น

นี่คือตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่


2

วางเมาส์เหนือองค์ประกอบด้วยเมาส์แล้วกด F8 (สิ่งนี้ใน Chrome) เพื่อหยุดการทำงานของสคริปต์ชั่วคราว สถานะโฮเวอร์จะยังปรากฏให้คุณเห็น

มันจะพาคุณไปยังแท็บแหล่งข้อมูล กลับไปที่แท็บองค์ประกอบ รหัสเวลานี้จะไม่หายไป


0

คุณสามารถดูองค์ประกอบที่ปรากฏและหายไปในตัวตรวจสอบภายใต้องค์ประกอบ หากคุณนำทางไปยังองค์ประกอบเมื่อมองเห็นได้คุณควรเห็นว่ามันหายไปหรือเห็นการเปลี่ยนแปลงของ CSS เมื่อสถานะเปลี่ยนไป

สิ่งนี้เป็นไปได้ด้วย firebug ใน firefox หรือตัวตรวจสอบที่สร้างขึ้นในโครเมี่ยม


1
ใช่. ฉันได้กล่าวว่าการเปลี่ยนแปลงที่เกิดขึ้นเร็วเกินไปใน DOM และปรับเปลี่ยนหน้า Dom อย่างหนักเพื่อให้มันจริงๆไม่ได้แก้ปัญหาตามที่ฉันไม่สามารถแยกแยะความแตกต่างองค์ประกอบที่จำเป็นของฉันจากพวงของการปรับเปลี่ยนทุกที่ :)
lukas.pukenis

คุณสามารถลองติดตามสิ่งที่เกิดขึ้นโดยใช้ console.log เช่นที่จุดเริ่มต้นของฟังก์ชั่นที่คุณพยายามตรวจสอบว่าคุณสามารถดูวัตถุ css ฯลฯ หรือชะลอการเปลี่ยนแปลงจนกว่าคุณจะรู้ว่าพวกเขาทำงานอย่างถูกต้องแล้วเปลี่ยนความเร็วเป็นสิ่งที่คุณ ต้องการให้เป็นเช่นซ่อน ('ช้า') ใน jQuery
matpol

ปัญหาคือ - มันไม่ใช่ codebase ของฉันมันเป็น codebase ที่เก่าและเก่าที่การค้นหาไฟล์อย่างง่าย ๆ ทำให้ฉันไม่ได้อะไรเลย .. :)
lukas.pukenis

คุณสามารถดูไฟล์ที่หน้ากำลังใช้งานในตัวตรวจสอบได้เช่นกัน ฉันจะทำการลบมันจนกว่ามันจะแตกจากนั้นดูในไฟล์ที่แตกออกและไปจากที่นั่น คุณสามารถค้นหาไฟล์จริงได้เช่นกัน
matpol

2
วิธีการนี้: stackoverflow.com/questions/10213703/…
matpol

0

ฉันมีปัญหาเดียวกัน แต่ฉันใช้ Firefox มันหายไปทันทีที่ฉันเปิดองค์ประกอบตรวจสอบพบวิธีแก้ไข: เปิด 4 ขีดกลาง (การตั้งค่า) ไปที่นักพัฒนาเว็บ> ดีบักเกอร์และกด F8 ทันทีซึ่งเป็นทางลัดสำหรับหยุดสคริปต์ ก่อนที่มันจะเตะและตรวจพบว่าคุณเปิดเครื่องมือสำหรับนักพัฒนา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.