С тех пор, как я начал автоматизировать браузеры для просмотра веб-страниц, прокрутка страницы стала для меня проблемой. Я искал в Интернете и нашел много решений. Одним из таких решений было
browser.execute_script("window.scrollTo(x, y)")
где «х» — положение по оси х, а «у» — положение по оси у.
Но откуда мне знать эти координаты?
1-й подход
Чтобы решить проблему, я нашел другой ответ
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
где «x» = 0, а «y» = полная высота документа.
2-й подход
Я решил установить некоторый диапазон для размера страницы и запустить код прокрутки внутри цикла, т.е.
for i in range(0, 7000, 200): browser.execute_script(f"window.scrollTo(x, {i})")
Здесь я определил диапазон размера страницы, то есть от 0 до 7000 пикселей. Когда я запускал код, он итерировался по длине 200, чтобы достичь длины 7000–1px.
Проблема: я вручную определил размер страницы. Как узнать точный размер страницы?
3-й подход
browser.execute_script(f"window.scrollTo(x, document.body.offsetHeight)")
4-й подход
while True: browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
Окончательный подход (Успех)
Решение, которое я нашел, было:
time.sleep(5) while True: height1 = driver.execute_script('return window.pageYOffset') time.sleep(2) scroll = driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') height2 = driver.execute_script('return window.pageYOffset') if height1 == height2: break else: continue
Позвольте мне объяснить каждую строку.
1- немного отдохнуть
2- запустить бесконечный цикл while
3- найти текущую высоту полосы прокрутки (не прокручивать вниз)
4- отдых 2 секунды
5/6- прокрутить вниз
7- найти эту новую высоту полосы прокрутки
8- проверьте, равна ли новая высота полосы прокрутки старой высоте.
(было бы иначе, если бы страница загружалась снова)
9- если высоты равны, разорвать петлю.
10- еще
11- продолжить петлю
Счастливая автоматизация