วิธีตรวจสอบว่าคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไป

เผยแพร่แล้ว: 2025-03-20

เมื่อทำงานกับ Python สำหรับ Web Automation หรือการขูดเว็บการตรวจสอบว่าคุณถึงจุดสิ้นสุดของหน้าเว็บเป็นสิ่งสำคัญหรือไม่ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการจัดการหน้าเลื่อนที่ไม่มีที่สิ้นสุดการขูดเนื้อหาที่โหลดแบบไดนามิกหรือหยุดการเลื่อนที่ไม่จำเป็นในสคริปต์ระบบอัตโนมัติ คู่มือนี้อธิบายวิธีการตรวจสอบว่าคุณไม่สามารถเลื่อนลงโดยใช้ Python และซีลีเนียมได้อีกต่อไป

เหตุใดการตรวจจับการสิ้นสุดของการเลื่อนจึงมีความสำคัญ

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

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

ยิ่งไปกว่านั้นประสิทธิภาพการเพิ่มประสิทธิภาพเป็นสิ่งสำคัญเนื่องจากช่วยให้การเลื่อนหยุดในเวลาที่เหมาะสมลดการดำเนินการ JavaScript ที่ไม่จำเป็นการอนุรักษ์ทรัพยากรระบบและการปรับปรุงประสิทธิภาพการทำงานอัตโนมัติ

วิธีตรวจสอบว่าคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไป

วิธีตรวจสอบว่าคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไป

มีหลายวิธีในการตรวจสอบว่าหน้าหนึ่งถึงขีด จำกัด การเลื่อนหรือไม่ ด้านล่างนี้เป็นวิธีการที่เชื่อถือได้มากที่สุดในการดำเนินการของ Selenium WebDriver และ JavaScript

1. การใช้ Selenium WebDriver และ JavaScript เพื่อตรวจจับการเลื่อนปลาย

วิธีหนึ่งในการตรวจจับจุดสิ้นสุดของการเลื่อนคือการตรวจสอบว่าความ สูงของม้วน ยังคงเหมือนเดิมหลังจากการเลื่อน ซีลีเนียมช่วยให้เราสามารถเรียกใช้คำสั่ง JavaScript เพื่อรับตำแหน่งการเลื่อนปัจจุบัน

ขั้นตอนในการตรวจจับการเลื่อนปลายโดยใช้ความสูงของการเลื่อน:

  1. โหลดหน้าเว็บโดยใช้ Selenium WebDriver
  2. รับตำแหน่งเลื่อนปัจจุบัน
  3. เลื่อนลงและรอให้เนื้อหาใหม่โหลด
  4. เปรียบเทียบตำแหน่งการเลื่อนก่อนหน้าและใหม่
  5. หากทั้งคู่เหมือนกันคุณจะมาถึงด้านล่าง

ตัวอย่างรหัส 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_height

Scroll_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_height

Scroll_infinite ()
driver.quit ()

สิ่งนี้จะเลื่อนลงอย่างต่อเนื่องและรอให้เนื้อหาใหม่โหลด เนื้อหาที่มีอยู่ทั้งหมดได้รับการโหลดเมื่อความสูงของการเลื่อนยังคงเหมือนเดิม

ปัญหาทั่วไปและการแก้ไขเมื่อตรวจจับการเลื่อนสิ้นสุด

นี่คือปัญหาทั่วไปที่คุณอาจพบเมื่อตรวจพบจุดสิ้นสุดของการเลื่อนและวิธีการแก้ไข:

  • หน้ายังคงเลื่อนแม้หลังจากถึงด้านล่าง บางเว็บไซต์มีองค์ประกอบส่วนท้ายที่ขยายตัวเมื่อเลื่อนเข้าไปในมุมมองทำให้ดูเหมือนว่าเนื้อหาใหม่กำลังโหลด
  • การโหลดขี้เกียจทำให้เนื้อหาที่ขาดหายไป - เว็บไซต์บางแห่งใช้ JavaScript เพื่อโหลดเนื้อหาเฉพาะเมื่อผู้ใช้เลื่อนลงต้องใช้เวลารอเพิ่มเติม
  • ความล่าช้าในการเรนเดอร์เนื้อหา - การเพิ่มความล่าช้าอีกต่อไป ( time.sleep(3) ) หลังจากการเลื่อนแต่ละครั้งอนุญาตให้เนื้อหาที่โหลดแบบไดนามิกปรากฏขึ้นก่อนที่สคริปต์จะดำเนินต่อไปอย่างสมบูรณ์
  • การเลื่อนเร็วเกินไป - การเลื่อนระยะทางเล็กลงและตรวจสอบว่ามีการเพิ่มองค์ประกอบใหม่ช่วยป้องกันไม่ให้มีการแก้ไขเนื้อหาที่สำคัญ
  • วิธีการรอคอยที่ไม่มีประสิทธิภาพ - การใช้การรออย่างชัดเจนของซีลีเนียมแทนที่จะพึ่งพาเวลาการนอนหลับคงที่ช่วยเพิ่มประสิทธิภาพโดยการรอองค์ประกอบจริงเพื่อโหลดแทนที่จะคาดเดาความล่าช้า

แนวทางปฏิบัติที่ดีที่สุดสำหรับการตรวจจับการสิ้นสุดของการเลื่อน

นี่คือแนวทางปฏิบัติที่ดีที่สุดเพื่อให้แน่ใจว่าการตรวจจับการเลื่อนที่แม่นยำและมีประสิทธิภาพ:

  • ตรวจสอบพฤติกรรมการเลื่อนก่อน - ตรวจสอบการเลื่อนทำงานบนเว็บไซต์เป้าหมายก่อนที่จะใช้งานระบบอัตโนมัติเพื่อหลีกเลี่ยงข้อผิดพลาดที่ไม่จำเป็น
  • ใช้ WebDriverWait แทนการนอนหลับคงที่ () - สิ่งนี้ปรับปรุงประสิทธิภาพโดยการรอองค์ประกอบแบบไดนามิกแทนที่จะพึ่งพาความล่าช้าโดยพลการ
  • หลีกเลี่ยงการเลื่อนมากเกินไป -การส่งคำขอเลื่อนจำนวนมากเกินไปอย่างรวดเร็วสามารถกระตุ้นการตรวจจับการต่อต้านบอทในบางเว็บไซต์นำไปสู่การบล็อก IP หรือความท้าทาย CAPTCHA
  • ตรวจสอบแหล่งข้อมูลทางเลือก หากเป้าหมายของคุณคือการขูดเว็บให้พิจารณาใช้ API ของเว็บไซต์เพื่อดึงข้อมูลโดยตรงแทนที่จะพึ่งพาการเลื่อน

บทสรุป

การตรวจจับหากคุณไม่สามารถเลื่อนลงใน Python ได้อีกต่อไปเป็นสิ่งจำเป็นสำหรับการทำงานอัตโนมัติของเว็บการขูดและการเพิ่มประสิทธิภาพสคริปต์ การใช้ Selenium WebDriver และ JavaScript คุณสามารถตรวจสอบการสิ้นสุดของการเลื่อนได้อย่างมีประสิทธิภาพโดยการเปรียบเทียบความสูงของสโครลตำแหน่งและเนื้อหาที่โหลดแบบไดนามิก การใช้วิธีการเหล่านี้ช่วยให้มั่นใจได้ว่าสคริปต์ของคุณจะหยุดในเวลาที่เหมาะสมป้องกันการเลื่อนที่ไม่จำเป็นและปรับปรุงประสิทธิภาพ

หากคู่มือนี้ช่วยคุณแบ่งปันกับคนอื่น ๆ ที่ทำงานกับเว็บอัตโนมัติและการขูด!