Dinamik bir web sayfasında gezinmenin ve sayfanın sonuna ulaşıldığında otomatik olarak durmanın bir yolunu arıyordum ve bu konuyu buldum.
Gönderen @Cuong Tran , bir ana değişiklikle, ben arıyordum o cevap oldu. Başkalarının değişikliği yararlı bulabileceğini düşündüm (kodun nasıl çalıştığı üzerinde belirgin bir etkisi var), dolayısıyla bu yazı.
Değişiklik, döngü içindeki son sayfa yüksekliğini yakalayan ifadeyi taşımaktır (böylece her kontrol önceki sayfa yüksekliğiyle karşılaştırılır).
Yani, aşağıdaki kod:
Dinamik bir web sayfasını ( .scrollTo()
) sürekli olarak aşağı kaydırır , yalnızca bir yineleme için sayfa yüksekliği aynı kaldığında durur.
(Break ifadesinin kaldırılabilen başka bir koşulda (sayfanın 'yapışması' durumunda) olduğu başka bir değişiklik vardır.
SCROLL_PAUSE_TIME = 0.5
while True:
# Get scroll height
### This is the difference. Moving this *inside* the loop
### means that it checks if scrollTo is still scrolling
last_height = driver.execute_script("return document.body.scrollHeight")
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
# try again (can be removed)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
# check if the page height has remained the same
if new_height == last_height:
# if so, you are done
break
# if not, move on to the next loop
else:
last_height = new_height
continue