Прокрутка страницы в Selenium

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

В основной функции Selenium нет опции прокрутки. Но мы можем воспроизвести ее с помощью некоторых дополнительных возможностей JavaScript, включенных в библиотеку Selenium, используя объект driver.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

В Selenium можно прокручивать страницу вниз тремя различными способами. Сегодня мы постараемся рассказать обо всех трех возможных вариантах.

Установка среды

Поскольку я увлекаюсь путешествиями, я люблю читать блоги о путешествиях. Сегодня мы попробуем прокрутить сайт под названием “50 самых посещаемых туристических достопримечательностей в мире”.

Скриншот страницы сайта

Итак, давайте начнем процесс. Во-первых, нам необходимо импортировать WebDriver из selenium, а затем создать из него объект драйвера. Далее необходимо указать путь к драйверу ChromeDriver, поскольку для прокрутки страницы мы будем использовать браузер Chrome.

Для лучшего обзора можно воспользоваться методом maximize_window().

Затем мы попытаемся подключиться к сайту с помощью метода driver.get(). Мы будем использовать неявное ожидание в течение 10 секунд. После подключения в нижней части страницы появится политика cookie. Нам нужно найти элемент-кнопку “OK, got it”, чтобы кликнуть по ней и принять политику cookie.

Примечание редакции: о поиске элементов читайте в статье “Поиск элемента в Selenium”, а о нажатии кнопок – в статье “Как нажать на кнопку с помощью Selenium”.

from selenium import webdriver
driver = webdriver.Chrome(executable_path = r'G:/chromedriver_win32/chromedriver.exe')
driver.maximize_window()
driver.get('https://www.lovehomeswap.com/blog/latest-news/the-50-most-visited-tourist-attractions-in-the-world')
driver.implicitly_wait(10)
cookie = driver.find_element_by_link_text('OK, got it')
cookie.click()

Прокрутка страницы вниз по пикселям

Существует возможность прокрутки страницы на определенное количество пикселей. Для этого нам нужен метод метод execute_script(), который позволяет выполнять JS-код, в который мы и передадим JS-команду скролла. Код выглядит следующим образом:

driver.execute_script("window.scrollBy(0,500)","")

Здесь нам необходимо ввести два параметра в метод scrollBy(). 0 – это начальная позиция пикселя или пиксель по умолчанию, а 500 – это позиция пикселя, до которой мы хотим прокрутить страницу. Изменяя эти значения, можно прокручивать страницу вниз от одного места к другому. Второй параметр метода execute_script() останется пустым.

Попробуем сделать это на сайте.

driver.execute_script("window.scrollBy(0,3000)","")

Поскольку мы установили второй параметр метода scrollBy() от 0 до 3000, то видим, что полоса прокрутки в правой части не остается в положении по умолчанию. Она прокрутилась вниз на 3000 пикселей. Изменяя второй параметр, мы можем посещать определенные места на странице с помощью этого метода.

Прокрутка страницы вниз до найденного элемента

Но что, если мы хотим найти определенный элемент на веб-странице, но не знаем точного расстояния в пикселях для этой точки? Как прокрутить страницу вниз до этого элемента? Это также возможно с помощью следующей команды.

driver.execute_script("arguments[0].scrollIntoView();",Element)

Для работы с этой командой сначала необходимо получить элемент, который мы хотим просмотреть, а затем передать его в наш JS-код.

Снова воспользуемся методом execute_script(), который также будет принимать два параметра. В качестве первого параметра мы введем "arguments[0].scrollIntoView();", а в качестве второго – переменную, содержащую нужный нам элемент.

Попробуем найти на веб-странице элемент "Niagra Falls". Мы хотим посмотреть, как его отображает браузер. Для этого подойдет следующий код.

niagara_falls = driver.find_element_by_link_text('Niagara Falls')
driver.execute_script("arguments[0].scrollIntoView();",niagara_falls)

Здесь мы попытались найти элемент по тексту ссылки и создали переменную niagara_falls с найденным WebElement. В следующей строке мы выполнили команду с помощью метода driver.execute_script.

"Niagra Falls" появляется в верхней части страницы. Иногда этот элемент может быть не виден из-за полосы “Вход в систему”. Тогда необходимо немного прокрутить страницу вверх, чтобы открыть вид.

Прокрутка вниз до конца страницы

С помощью метода execute_script можно также прокрутить страницу вниз до конца. Команда будет выглядеть следующим образом:

driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")

Здесь мы снова используем оператор JavaScript внутри метода execute_script().

Метод scrollBy() будет принимать два параметра. Первый – 0, как начальная точка отсчета, а второй должен быть JavaScript-определением document.body.scrollHeight, так как он позволяет получить длину полосы прокрутки. Если мы выполним код, изложенный выше, то увидим страницу в таком виде:

С правой стороны видно, что полоса прокрутки достигла конечной точки страницы.

Вот и все о методах, которые мы сегодня используем в Selenium Python для автоматической прокрутки окна браузера вниз. Если есть желание ознакомиться с документацией Selenium и тем как там описан скроллинг, то вот вам ссылка.

Перевод статьи «Python Selenium – How to Scroll Down a Page?».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *