วิธีตรวจสอบว่าคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไป
เผยแพร่แล้ว: 2025-03-20เมื่อทำงานกับ Python สำหรับ Web Automation หรือการขูดเว็บการตรวจสอบว่าคุณถึงจุดสิ้นสุดของหน้าเว็บเป็นสิ่งสำคัญหรือไม่ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการจัดการหน้าเลื่อนที่ไม่มีที่สิ้นสุดการขูดเนื้อหาที่โหลดแบบไดนามิกหรือหยุดการเลื่อนที่ไม่จำเป็นในสคริปต์ระบบอัตโนมัติ คู่มือนี้อธิบายวิธีการตรวจสอบว่าคุณไม่สามารถเลื่อนลงโดยใช้ Python และซีลีเนียมได้อีกต่อไป
เหตุใดการตรวจจับการสิ้นสุดของการเลื่อนจึงมีความสำคัญ
เว็บไซต์สมัยใหม่หลายแห่งใช้การเลื่อนที่ไม่มีที่สิ้นสุดซึ่งเนื้อหาโหลดแบบไดนามิกเมื่อผู้ใช้เลื่อนลง การตรวจจับเมื่อคุณไปถึงด้านล่างของหน้าเป็นสิ่งจำเป็นด้วยเหตุผลหลายประการ
ช่วยให้มั่นใจได้ว่าการขูดเว็บที่มีประสิทธิภาพโดยการป้องกันการเลื่อนที่ไม่จำเป็นเมื่อไม่มีข้อมูลใหม่ สิ่งนี้ช่วยให้สคริปต์หลีกเลี่ยงการกระทำซ้ำซ้อนและเพิ่มความเร็วในการรวบรวมข้อมูล นอกจากนี้ยังช่วยป้องกันข้อผิดพลาดเมื่อสคริปต์ยังคงเลื่อนโดยไม่ตรวจจับจุดสิ้นสุดอาจทำให้เกิดการล่มหรือลูปที่ไม่มีที่สิ้นสุด
ยิ่งไปกว่านั้นประสิทธิภาพการเพิ่มประสิทธิภาพเป็นสิ่งสำคัญเนื่องจากช่วยให้การเลื่อนหยุดในเวลาที่เหมาะสมลดการดำเนินการ JavaScript ที่ไม่จำเป็นการอนุรักษ์ทรัพยากรระบบและการปรับปรุงประสิทธิภาพการทำงานอัตโนมัติ
วิธีตรวจสอบว่าคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไป
มีหลายวิธีในการตรวจสอบว่าหน้าหนึ่งถึงขีด จำกัด การเลื่อนหรือไม่ ด้านล่างนี้เป็นวิธีการที่เชื่อถือได้มากที่สุดในการดำเนินการของ Selenium WebDriver และ JavaScript
1. การใช้ Selenium WebDriver และ JavaScript เพื่อตรวจจับการเลื่อนปลาย
วิธีหนึ่งในการตรวจจับจุดสิ้นสุดของการเลื่อนคือการตรวจสอบว่าความ สูงของม้วน ยังคงเหมือนเดิมหลังจากการเลื่อน ซีลีเนียมช่วยให้เราสามารถเรียกใช้คำสั่ง JavaScript เพื่อรับตำแหน่งการเลื่อนปัจจุบัน
ขั้นตอนในการตรวจจับการเลื่อนปลายโดยใช้ความสูงของการเลื่อน:
- โหลดหน้าเว็บโดยใช้ Selenium WebDriver
- รับตำแหน่งเลื่อนปัจจุบัน
- เลื่อนลงและรอให้เนื้อหาใหม่โหลด
- เปรียบเทียบตำแหน่งการเลื่อนก่อนหน้าและใหม่
- หากทั้งคู่เหมือนกันคุณจะมาถึงด้านล่าง
ตัวอย่างรหัส Python:
จาก Selenium Import WebDriver
เวลานำเข้า# ตั้งค่า webDriver
driver = webDriver.chrome ()
driver.get (“ https://example.com”) # แทนที่ด้วยเว็บไซต์จริงdef scroll_to_bottom ():
last_height = driver.execute_script (“ return document.body.scrollheight”)ในขณะที่จริง:
driver.execute_script (“ window.scrollto (0, document.body.scrollheight);”)
time.sleep (2) # รอเนื้อหาโหลดnew_height = driver.execute_script (“ return document.body.scrollheight”)
ถ้า new_height == last_height:
พิมพ์ (“ ถึงด้านล่างของหน้า”)
หยุดพัก
last_height = new_heightScroll_to_bottom ()
driver.quit ()
สคริปต์นี้เลื่อนลงจนกระทั่งความสูงของหน้าไม่เพิ่มขึ้นอีกต่อไประบุว่าไม่มีเนื้อหาอีกต่อไป
2. การตรวจสอบก่อนและหลังตำแหน่งเลื่อน
อีกวิธีหนึ่งในการตรวจสอบว่าคุณไม่สามารถเลื่อนลงได้อีกต่อไปคือการเปรียบเทียบตำแหน่งเลื่อนปัจจุบันก่อนและหลังการเลื่อน หากตำแหน่งการเลื่อนไม่เปลี่ยนแปลงคุณจะมาถึงด้านล่างแล้ว
ตัวอย่างรหัส Python:
จาก Selenium Import WebDriver
เวลานำเข้า
# ตั้งค่า webDriver
driver = webDriver.chrome ()
driver.get (“ https://example.com”) # แทนที่ด้วยเว็บไซต์จริงdef detect_scroll_end ():
ในขณะที่จริง:
last_position = driver.execute_script (“ return window.pageyoffset;”)
driver.execute_script (“ window.scrollby (0, 500);”) # เลื่อนลง 500 พิกเซล
time.sleep (2) # อนุญาตให้โหลดเนื้อหาnew_position = driver.execute_script (“ return window.pageyoffset;”)
ถ้า last_position == new_position:
พิมพ์ (“ ไม่สามารถเลื่อนได้อีกต่อไป”)
หยุดพักdetect_scroll_end ()
driver.quit ()
วิธีนี้เลื่อนลงโดยเพิ่มขึ้นเล็กน้อยและตรวจสอบว่าตำแหน่งการเลื่อนยังคงไม่เปลี่ยนแปลงหรือไม่ซึ่งหมายความว่าหน้าไม่สามารถเลื่อนหน้าต่อไปได้
3. การจัดการเว็บไซต์สกรอลที่ไม่มีที่สิ้นสุด
การตรวจสอบการเลื่อนแบบง่ายอาจไม่เพียงพอสำหรับเว็บไซต์ที่โหลดเนื้อหามากขึ้นแบบไดนามิก บางหน้าต้องใช้เวลารอเพิ่มเติมสำหรับ JavaScript ในการโหลดเนื้อหา คุณสามารถปรับเปลี่ยนสคริปต์เพื่อตรวจสอบองค์ประกอบใหม่ที่ปรากฏหลังจากการเลื่อนแต่ละครั้ง
รหัสตรวจจับเลื่อนขั้นสูงสำหรับการเลื่อนที่ไม่มีที่สิ้นสุด:
จาก Selenium Import WebDriver
จาก selenium.webdriver.common.by นำเข้าโดย
เวลานำเข้า# ตั้งค่า webDriver
driver = webDriver.chrome ()
driver.get (“ https://example.com”) # แทนที่ด้วย URL จริงdef scroll_infinite ():
last_height = driver.execute_script (“ return document.body.scrollheight”)ในขณะที่จริง:
driver.execute_script (“ window.scrollto (0, document.body.scrollheight);”)
time.sleep (3) # อนุญาตให้เนื้อหา JavaScript โหลดnew_height = driver.execute_script (“ return document.body.scrollheight”)
ถ้า new_height == last_height:
พิมพ์ (“ End of Infinite Scroll มาถึง”)
หยุดพัก
last_height = new_heightScroll_infinite ()
driver.quit ()
สิ่งนี้จะเลื่อนลงอย่างต่อเนื่องและรอให้เนื้อหาใหม่โหลด เนื้อหาที่มีอยู่ทั้งหมดได้รับการโหลดเมื่อความสูงของการเลื่อนยังคงเหมือนเดิม
ปัญหาทั่วไปและการแก้ไขเมื่อตรวจจับการเลื่อนสิ้นสุด
นี่คือปัญหาทั่วไปที่คุณอาจพบเมื่อตรวจพบจุดสิ้นสุดของการเลื่อนและวิธีการแก้ไข:
- หน้ายังคงเลื่อนแม้หลังจากถึงด้านล่าง บางเว็บไซต์มีองค์ประกอบส่วนท้ายที่ขยายตัวเมื่อเลื่อนเข้าไปในมุมมองทำให้ดูเหมือนว่าเนื้อหาใหม่กำลังโหลด
- การโหลดขี้เกียจทำให้เนื้อหาที่ขาดหายไป - เว็บไซต์บางแห่งใช้ JavaScript เพื่อโหลดเนื้อหาเฉพาะเมื่อผู้ใช้เลื่อนลงต้องใช้เวลารอเพิ่มเติม
- ความล่าช้าในการเรนเดอร์เนื้อหา - การเพิ่มความล่าช้าอีกต่อไป (
time.sleep(3)
) หลังจากการเลื่อนแต่ละครั้งอนุญาตให้เนื้อหาที่โหลดแบบไดนามิกปรากฏขึ้นก่อนที่สคริปต์จะดำเนินต่อไปอย่างสมบูรณ์ - การเลื่อนเร็วเกินไป - การเลื่อนระยะทางเล็กลงและตรวจสอบว่ามีการเพิ่มองค์ประกอบใหม่ช่วยป้องกันไม่ให้มีการแก้ไขเนื้อหาที่สำคัญ
- วิธีการรอคอยที่ไม่มีประสิทธิภาพ - การใช้การรออย่างชัดเจนของซีลีเนียมแทนที่จะพึ่งพาเวลาการนอนหลับคงที่ช่วยเพิ่มประสิทธิภาพโดยการรอองค์ประกอบจริงเพื่อโหลดแทนที่จะคาดเดาความล่าช้า
แนวทางปฏิบัติที่ดีที่สุดสำหรับการตรวจจับการสิ้นสุดของการเลื่อน
นี่คือแนวทางปฏิบัติที่ดีที่สุดเพื่อให้แน่ใจว่าการตรวจจับการเลื่อนที่แม่นยำและมีประสิทธิภาพ:
- ตรวจสอบพฤติกรรมการเลื่อนก่อน - ตรวจสอบการเลื่อนทำงานบนเว็บไซต์เป้าหมายก่อนที่จะใช้งานระบบอัตโนมัติเพื่อหลีกเลี่ยงข้อผิดพลาดที่ไม่จำเป็น
- ใช้ WebDriverWait แทนการนอนหลับคงที่ () - สิ่งนี้ปรับปรุงประสิทธิภาพโดยการรอองค์ประกอบแบบไดนามิกแทนที่จะพึ่งพาความล่าช้าโดยพลการ
- หลีกเลี่ยงการเลื่อนมากเกินไป -การส่งคำขอเลื่อนจำนวนมากเกินไปอย่างรวดเร็วสามารถกระตุ้นการตรวจจับการต่อต้านบอทในบางเว็บไซต์นำไปสู่การบล็อก IP หรือความท้าทาย CAPTCHA
- ตรวจสอบแหล่งข้อมูลทางเลือก หากเป้าหมายของคุณคือการขูดเว็บให้พิจารณาใช้ API ของเว็บไซต์เพื่อดึงข้อมูลโดยตรงแทนที่จะพึ่งพาการเลื่อน
บทสรุป
การตรวจจับหากคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไปเป็นสิ่งจำเป็นสำหรับการทำงานอัตโนมัติของเว็บการขูดและการเพิ่มประสิทธิภาพสคริปต์ การใช้ Selenium WebDriver และ JavaScript คุณสามารถตรวจสอบการสิ้นสุดของการเลื่อนได้อย่างมีประสิทธิภาพโดยการเปรียบเทียบความสูงของสโครลตำแหน่งและเนื้อหาที่โหลดแบบไดนามิก การใช้วิธีการเหล่านี้ช่วยให้มั่นใจได้ว่าสคริปต์ของคุณจะหยุดในเวลาที่เหมาะสมป้องกันการเลื่อนที่ไม่จำเป็นและปรับปรุงประสิทธิภาพ
หากคู่มือนี้ช่วยคุณแบ่งปันกับคนอื่น ๆ ที่ทำงานกับเว็บอัตโนมัติและการขูด!