Введение
Для выполнения данного кода должен быть установлен Selenium и ChromeDriver. Также должны быть импортированы Selenium и Time и создан экземпляр Selenium.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://digitalsfera.ru/")
Для поиска элементов на странице нужно импортировать модуль By. Также нужно открыть нужный раздел сайта. В примерах кода дальше я это опускаю, оставляя только конкретные инструкции.
Прокрутка до конца
Чтобы заставить страницу прокручиваться с помощью Selenium в Python, можно воспользоваться запуском JavaScript кода в браузере. Вот пример фрагмента кода, который выполнит прокрутку вниз.
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Запуск JavaScript выполняется с помощью метода execute_script(). Этот метод принимает в качестве аргумента команду JavaScript.
Прокрутка до элемента
Если нужно прокрутить область просмотра до определенного элемента, вы можете найти этот элемент с помощью любого из доступных методов определения местоположения (например, селектор CSS, XPath), а затем использовать метод JavaScript scrollIntoView(), вызванный все тем же Selenium execute_script().
element = driver.find_element(By.CSS_SELECTOR, "your-element-selector")
driver.execute_script("arguments[0].scrollIntoView(true);", element)
При этом обратите внимание, что мы передаем найденный в Selenium элемент как второй аргумент метода execute_script(), и в самом JavaScript он доступен в виде 0 элемента массива arguments.
Прокрутка динамических страниц
На некоторых сайтах, например в лентах соцсетей или видеохостингов, работает динамическая загрузка контента — новые элементы добавляются по мере скролла.
Если использовать обычную прокрутку вниз, то произойдет лишь одна загрузка контента, а их может быть значительно больше.
Чтобы это обойти, запускаем прокрутку в цикле — скролл в конец страницы, ждем 2 секунды, проверяем, изменилась ли высота страницы, если да, то скроллим снова.
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Прокрутка вниз
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Пауза, пока загрузится страница.
sleep(2)
# Вычисляем новую высоту прокрутки и сравниваем с последней высотой прокрутки.
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
print("Прокрутка завершена")
last_height = new_height
print("Появился новый контент, прокручиваем дальше")
После прокрутки до нижней части скрипт «засыпает» на 2 секунды. Это делается для того, чтобы дать браузеру время загрузить всю страницу.
Чтобы запустить этот код, необходимо установить библиотеку Selenium и драйвер ChromeDriver. Инструкции о том, как это сделать, можно найти на сайте Selenium.
Разобрали основные варианта реализации скролла, надеюсь статья была полезна. Можете подписаться на телеграм-канал, чтобы не пропускать выход новых статей и заметок, которые не выходят на сайте.
Комментарии (1)