Урок 12. Работа с выпадающими списками (Select) через Selenium
Веб-формы часто содержат выпадающие списки (select), из которых пользователь выбирает один или несколько вариантов.
Selenium предоставляет удобный инструмент Select для работы с такими элементами.
В этом уроке мы разберём основные приёмы работы с выпадающими списками на практике.
Импорт и подготовка
Для работы с выпадающими списками нужен специальный модуль selenium.webdriver.support.ui.Select.
Его можно использовать вместе с обычным драйвером браузера.
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome()
driver.get("https://example.com/form") # URL страницы с формой
Выбор элемента из списка
Вы можете выбрать элемент по видимому тексту, значению (value) или индексу:
# Находим выпадающий список по CSS селектору или ID
dropdown = Select(driver.find_element(By.ID, "country"))
# Выбор по видимому тексту
dropdown.select_by_visible_text("Россия")
# Выбор по значению (value)
dropdown.select_by_value("ru")
# Выбор по индексу (порядковый номер, начиная с 0)
dropdown.select_by_index(3)
time.sleep(2) # Пауза для просмотра выбранного значения
Получение всех вариантов из списка
Иногда нужно получить список всех доступных опций:
options = dropdown.options
for option in options:
print(option.text)
Пример отправки формы
После выбора нужных значений в форме, можно нажать кнопку отправки:
submit_btn = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
submit_btn.click()
time.sleep(3) # Ждем, чтобы страница обработала форму
driver.quit()
Рабочий пример
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
# Создаём экземпляр Chrome
driver = webdriver.Chrome()
driver.maximize_window() # разворачиваем окно для наглядности
time.sleep(5) # ждём 5 секунд, чтобы увидеть окно браузера
# Открываем страницу с примером <select>
driver.get("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select")
time.sleep(5) # ждём 5 секунд для загрузки страницы
# Переключаемся во фрейм, где находится список
driver.switch_to.frame("iframeResult")
time.sleep(5) # ждём 5 секунд, чтобы убедиться, что фрейм загружен
# Находим элемент <select> и создаём объект Select
dropdown = Select(driver.find_element(By.TAG_NAME, "select"))
time.sleep(5) # пауза перед выбором элемента
# Выбираем пункт "Opel"
dropdown.select_by_visible_text("Opel")
time.sleep(5) # ждём 5 секунд чтобы увидеть выбранный пункт
print("Выбран пункт меню Opel") # выводим сообщение в консоль
# Закрываем браузер
driver.quit()
Советы и рекомендации
- Если список генерируется динамически, используйте
WebDriverWaitперед выбором элемента - Для множественных селектов можно использовать методы
select_by_visible_textнесколько раз - После выбора опции убедитесь, что страница корректно обновилась, особенно если выбираются категории или фильтры
Использование Selenium с Select позволяет автоматизировать работу с формами и ускоряет сбор данных с сайтов с множественными выпадающими списками.
Больше уроков по парсингу на parsertools.ru/lessons.
