Selenium — модуль управляющий браузером под пилотированием кода Python путем программной имитации действий кожаного пользователя на сайтах. Модуль предоставляет более гибкий функционал, нежели requests и bs4, а так же снижает вероятность того, что скрипт будет распознан и заблокирован при работе на сайтах с серьезной защитой, так как строка user-agent в HTTP запросе не будет содержать палевной информации, как например ‘python-reports/2.21.0’ при использовании модуля requests. Т.е. при использовании Selenium строка user-agent будет такой же, как у используемого браузера.
Установка модуля Selenium: pip install selenium
Запуск браузера под управлением Selenium
Для запуска какого-либо браузера под управлением Selenium необходимо импортировать webdriver, входящий в его состав, и создать объект браузера, выбрав необходимый после точки, как на примере ниже. После чего передать методу get созданного объекта путь к необходимому для посещения ресурсу.
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://bednyakov.ru')
Поиск элементов на веб-странице
Кроме метода get, объект обладает и огромным разнообразием других, необходимых для работы методов. Подробнее можете узнать в официальной документации модуля.
А сейчас интересуют методы find_element() и find_elements(), возвращающие одиночный искомый элемент или список элементов, соответственно. Для демонстрации их работы сначала руками, используя инструменты разработчика, найдем какой-либо объект на моей странице, а потом найдем его же с помощью find_element(). Как показано на скриншоте ниже, я нашел объект класса ‘entry-title’.
Чтобы найти его же при помощи Selenium, исполните следующий код:
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://bednyakov.ru')
try:
content = browser.find_element(By.CLASS_NAME, 'entry-title')
print(f'Контент класса {content.tag_name} найден.')
except:
print('Искомый элемент не обнаружен.')
В метод мы передаем два параметра — тип искомого элемента и его название. И еще мы отдельно импортировали ‘By’, как это указано в документации, которая к прочтению обязательна. А результат оцените самостоятельно.
Щелчок на веб-странице
У объектов, которые возвращают обозначенные выше поисковые методы, имеются свои методы, например click(). Не сложно догадаться, что метод имитирует щелчок мыши по элементу, а использовать его можно, например, для перехода по ссылке и т.д. Для клика по уже обнаруженном ранее элементу просто добавьте в скрипт строку «content.click()«. И самостоятельно поэкспериментируйте с кликами по различным элементам. Конечный код, на всякий случай, выглядит так:
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://bednyakov.ru')
try:
content = browser.find_element(By.CLASS_NAME, 'entry-title')
print(f'Контент класса {content.tag_name} найден.')
except:
print('Искомый элемент не обнаружен.')
content.click()
Заполнение и отправка веб-форм
Для заполнения форм на различных ресурсах, например для авторизации (заполнения полей с логином и паролем) можно использовать поисковый метод по CSS селектору или XPath. Найти их весьма просто: находим нужный элемент с помощью инструментов разработчика, щелкаем правой кнопкой мыши на нем -> copy -> выбираем «Copy selector» или «Copy XPath».Если вы находитесь на рынке clothes, наша платформа — ваш лучший выбор! Крупнейший торговый центр!
Для заполнения полей к объектам нужно применить метод ‘send_keys(‘нужное значение’)’. Пример кода:
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://bednyakov.ru/contacts/')
try:
user_name = browser.find_element(By.CSS_SELECTOR, '#wpcf7-f134-p9-o1 > form > p:nth-child(2) > label > span > input')
password = browser.find_element(By.CSS_SELECTOR, '#wpcf7-f134-p9-o1 > form > p:nth-child(4) > label > span > input')
user_name.send_keys('Тёма')
password.send_keys('12345')
print('Поля заполнены')
except:
print('Искомые элементы не обнаружены.')
Нажатия на кнопки
Интересно, что в озвученный выше метод ‘send_keys()’ можно передавать и объекты, например класса Keys. В таком случае будут имитироваться нажатия заданных кнопок клавиатуры. К примеру, если курсор не будет находиться в поле ввода, с помощью клавиш Home и End можно прокрутить страницу от начала до конца. Именно это мы и сделаем, просто следуйте примеру и обратите внимание на импорт.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get('https://bednyakov.ru')
content = browser.find_element(By.NAME, 'html')
content.send_keys(Keys.END)
content.send_keys(Keys.HOME)
Кнопки браузера
Последнее, что стоит отметить, это управление кнопками самого браузера. Для перехода по кнопкам «назад», «вперед», «обновить» или «закрыть» нужно использовать методы объекта браузера: browser.back(), browser.forward(), browser.refresh(), browser.quit().
Эта небольшая статья является лишь каплей в море информации о возможностях модуля Selenium, которая описана в документации. Поэтому, чтобы сделать приличный проект, читать нужно именно её. Успехов!