Если вы хотите получить доступ к контенту на странице ниже видимой части экрана или найти что-то на странице, что подгружается после скролла, вы используете прокрутку. Можно ли с помощью 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?».