Введение

Для выполнения данного кода должен быть установлен 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.

Разобрали основные варианта реализации скролла, надеюсь статья была полезна. Можете подписаться на телеграм-канал, чтобы не пропускать выход новых статей и заметок, которые не выходят на сайте.