Введение в Selenium
Selenium — это фреймворк с открытым исходным кодом для автоматизации действий в браузере. Он позволяет программно управлять браузерами, имитируя действия пользователя: навигацию, ввод данных, клики, работу с формами и многое другое. Selenium используется для тестирования пользовательских интерфейсов, веб-скрейпинга, автоматизации задач и проверки веб-приложений.
Основные возможности и особенности Selenium
-
Поддержка всех популярных браузеров (Chrome, Firefox, Edge, Safari)
-
Имитация действий пользователя: клики, ввод, навигация
-
Работа с элементами через CSS, XPath, ID, Class и др.
-
Поддержка headless-режима (без графического интерфейса)
-
Работа с вкладками, alert-окнами, cookie и прокси
-
Интеграция с CI/CD и фреймворками тестирования (pytest, unittest)
Установка Selenium и драйвера браузера
Установка библиотеки:
Скачивание драйвера Chrome:
-
Для Chrome: https://sites.google.com/chromium.org/driver/
-
Убедитесь, что версия драйвера соответствует версии установленного браузера.
Пример запуска:
Запуск браузера и базовый пример
Навигация по страницам
Поиск элементов: By.ID, By.CLASS_NAME, By.XPATH
Работа с текстовыми полями и кнопками
Обработка форм и отправка данных
Или вручную по клику:
Навигация по ссылкам и клики
Работа с выпадающими списками и чекбоксами
Снятие скриншотов и сохранение страниц
Управление окнами, вкладками и алертами
Явные и неявные ожидания
Явное ожидание:
Неявное ожидание:
Прокси, куки и заголовки
Работа с cookies:
Использование headless режима
Интеграция с BeautifulSoup и Scrapy
Используется для анализа DOM и сложной фильтрации данных.
Тестирование интерфейсов с Selenium
Интеграция с unittest
:
Развёртывание и автоматизация с CI/CD
-
Интеграция с Jenkins, GitHub Actions, GitLab CI
-
Запуск в Docker (с headless Chrome)
-
Использование xvfb для GUI в Linux-среде
Часто задаваемые вопросы
Что такое Selenium?
Фреймворк для управления браузером, автоматизации действий пользователя и тестирования веб-приложений.
Какие браузеры поддерживаются?
Chrome, Firefox, Edge, Safari, Opera.
Можно ли использовать Selenium без графического интерфейса?
Да, с помощью headless-режима.
Подходит ли Selenium для скрейпинга?
Да, особенно для JavaScript-страниц. Но для массового сбора данных лучше использовать Scrapy + Splash.
Как ускорить Selenium?
-
Использовать headless-режим
-
Минимизировать задержки
-
Явные ожидания вместо
time.sleep
Полный справочник по ключевым функциям и модулям библиотеки Selenium для Python
Основы: запуск браузера
Компонент | Описание |
---|---|
webdriver.Chrome() |
Запускает Chrome через ChromeDriver. |
webdriver.Firefox() |
Запускает Firefox через GeckoDriver. |
webdriver.Edge() |
Запускает Edge. |
webdriver.Safari() |
Safari (на macOS). |
driver.get(url) |
Загружает веб-страницу по указанному URL. |
driver.quit() |
Закрывает браузер и завершает сессию. |
Поиск элементов
Метод | Описание |
---|---|
find_element(By.ID, "id") |
Поиск по id . |
find_element(By.NAME, "name") |
Поиск по имени. |
find_element(By.CLASS_NAME, "class") |
Поиск по классу. |
find_element(By.TAG_NAME, "tag") |
Поиск по имени тега. |
find_element(By.CSS_SELECTOR, "selector") |
Поиск по CSS-селектору. |
find_element(By.XPATH, "xpath") |
Поиск по XPath. |
find_elements(...) |
Возвращает список всех совпадающих элементов. |
Взаимодействие с элементами
Метод | Описание |
---|---|
.click() |
Клик по элементу. |
.send_keys("текст") |
Ввод текста. |
.clear() |
Очистка поля ввода. |
.submit() |
Отправка формы. |
.text |
Извлекает видимый текст. |
.get_attribute("attr") |
Получает значение атрибута. |
.is_displayed() |
Проверяет, отображается ли элемент. |
.is_enabled() |
Проверяет, активен ли элемент. |
Управление страницей
Метод | Описание |
---|---|
driver.back() |
Переход назад. |
driver.forward() |
Вперёд. |
driver.refresh() |
Обновить страницу. |
driver.title |
Заголовок страницы. |
driver.current_url |
Текущий URL. |
driver.page_source |
HTML-код страницы. |
Работа с окнами и фреймами
Метод | Описание |
---|---|
driver.window_handles |
Список всех открытых вкладок. |
driver.switch_to.window(handle) |
Переключение между вкладками. |
driver.switch_to.frame(name_or_id) |
Переход во фрейм. |
driver.switch_to.default_content() |
Возврат в основной контент. |
Явные и неявные ожидания
Метод / Класс | Описание |
---|---|
driver.implicitly_wait(seconds) |
Устанавливает глобальное ожидание. |
WebDriverWait(driver, timeout) |
Явное ожидание. |
EC.presence_of_element_located() |
Условие для ожидания появления элемента. |
EC.element_to_be_clickable() |
Ожидание кликабельности элемента. |
Работа с выпадающими списками (Select)
Класс / Метод | Описание |
---|---|
Select(element) |
Управление <select> -элементом. |
.select_by_value("val") |
Выбрать по значению. |
.select_by_visible_text("Текст") |
По видимому тексту. |
.select_by_index(n) |
По индексу. |
Работа с alert/confirm/prompt
Метод | Описание |
---|---|
driver.switch_to.alert |
Переключение на окно alert. |
.accept() |
Подтвердить. |
.dismiss() |
Отклонить. |
.text |
Получить текст окна. |
.send_keys("текст") |
Ввод в prompt. |
Загрузка файлов
Метод | Описание |
---|---|
.send_keys("path") |
Указание пути к файлу для <input type="file"> . |
Скроллинг и JS-взаимодействие
Метод | Описание |
---|---|
driver.execute_script("JS-код") |
Выполняет произвольный JavaScript. |
element.location_once_scrolled_into_view |
Скроллит к элементу. |
Скриншоты
Метод | Описание |
---|---|
driver.save_screenshot("file.png") |
Сохранение всей страницы. |
element.screenshot("element.png") |
Скриншот конкретного элемента. |
Завершение работы
Метод | Описание |
---|---|
driver.close() |
Закрывает текущее окно. |
driver.quit() |
Полностью завершает сеанс и закрывает все окна. |
Поддержка Headless и настроек
Возможность | Описание |
---|---|
Options() |
Класс для настройки запуска браузера. |
.add_argument("--headless") |
Безголовый режим. |
.add_argument("--
|