Урок 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.