Я шукав спосіб прокрутки динамічної веб-сторінки, і автоматично зупинявся, як тільки був досягнутий кінець сторінки, і знайшов цю тему.
Запис від @Cuong Tran , з однією основною модифікацією, був відповіддю, який я шукав. Я думав, що інші можуть вважати модифікацію корисною (це яскраво впливає на те, як працює код), звідси і ця публікація.
Модифікація полягає в переміщенні оператора, який фіксує останню висоту сторінки всередині циклу (так що кожна перевірка порівнюється з попередньою висотою сторінки).
Отже, код нижче:
Постійно прокручує динамічну веб-сторінку ( .scrollTo()
), зупиняючись лише тоді, коли за одну ітерацію висота сторінки залишається однаковою.
(Є ще одна модифікація, де оператор перерви знаходиться в іншій умові (у випадку, якщо сторінка 'приклеюється'), яку можна видалити).
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