Selenium – автоматизация браузера

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Selenium

Selenium — это фреймворк с открытым исходным кодом для автоматизации действий в браузере. Он позволяет программно управлять браузерами, имитируя действия пользователя: навигацию, ввод данных, клики, работу с формами и многое другое. Selenium используется для тестирования пользовательских интерфейсов, веб-скрейпинга, автоматизации задач и проверки веб-приложений.


Основные возможности и особенности Selenium

  • Поддержка всех популярных браузеров (Chrome, Firefox, Edge, Safari)

  • Имитация действий пользователя: клики, ввод, навигация

  • Работа с элементами через CSS, XPath, ID, Class и др.

  • Поддержка headless-режима (без графического интерфейса)

  • Работа с вкладками, alert-окнами, cookie и прокси

  • Интеграция с CI/CD и фреймворками тестирования (pytest, unittest)


Установка Selenium и драйвера браузера

Установка библиотеки:

bash
pip install selenium

Скачивание драйвера Chrome:

Пример запуска:

python
from selenium import webdriver driver = webdriver.Chrome(executable_path="path/to/chromedriver")

Запуск браузера и базовый пример

python
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com") print(driver.title) driver.quit()

Навигация по страницам

python
driver.get("https://example.com") driver.refresh() driver.back() driver.forward()

Поиск элементов: By.ID, By.CLASS_NAME, By.XPATH

python
from selenium.webdriver.common.by import By element = driver.find_element(By.ID, "username") element = driver.find_element(By.CLASS_NAME, "login") element = driver.find_element(By.XPATH, "//input[@name='email']")

Работа с текстовыми полями и кнопками

python
input_field = driver.find_element(By.NAME, "username") input_field.send_keys("admin") submit_button = driver.find_element(By.XPATH, "//button[@type='submit']") submit_button.click()

Обработка форм и отправка данных

python
form = driver.find_element(By.ID, "loginForm") form.submit()

Или вручную по клику:

python
button = driver.find_element(By.XPATH, "//input[@type='submit']") button.click()

Навигация по ссылкам и клики

python
link = driver.find_element(By.LINK_TEXT, "Подробнее") link.click()

Работа с выпадающими списками и чекбоксами

python
from selenium.webdriver.support.ui import Select select = Select(driver.find_element(By.ID, "dropdown")) select.select_by_visible_text("Опция 1") checkbox = driver.find_element(By.ID, "agree") if not checkbox.is_selected(): checkbox.click()

Снятие скриншотов и сохранение страниц

python
driver.save_screenshot("screenshot.png") with open("page.html", "w", encoding="utf-8") as f: f.write(driver.page_source)

Управление окнами, вкладками и алертами

python
driver.switch_to.window(driver.window_handles[1]) alert = driver.switch_to.alert alert.accept()

Явные и неявные ожидания

Явное ожидание:

python
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "success")) )

Неявное ожидание:

python
driver.implicitly_wait(5)

Прокси, куки и заголовки

Работа с cookies:

python
driver.add_cookie({"name": "session", "value": "abc123"}) cookies = driver.get_cookies()

Использование headless режима

python
from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless") driver = webdriver.Chrome(options=options)

Интеграция с BeautifulSoup и Scrapy

python
from bs4 import BeautifulSoup html = driver.page_source soup = BeautifulSoup(html, 'html.parser') print(soup.title.text)

Используется для анализа DOM и сложной фильтрации данных.


Тестирование интерфейсов с Selenium

Интеграция с unittest:

python
import unittest class LoginTest(unittest.TestCase): def test_login(self): driver = webdriver.Chrome() driver.get("https://example.com") ... driver.quit()

Развёртывание и автоматизация с 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() Закрывает браузер и завершает сессию.
python
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com")

Поиск элементов

Метод Описание
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(...) Возвращает список всех совпадающих элементов.
python
from selenium.webdriver.common.by import By element = driver.find_element(By.ID, "search")

Взаимодействие с элементами

Метод Описание
.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() Ожидание кликабельности элемента.
python
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, "login")))

Работа с выпадающими списками (Select)

Класс / Метод Описание
Select(element) Управление <select>-элементом.
.select_by_value("val") Выбрать по значению.
.select_by_visible_text("Текст") По видимому тексту.
.select_by_index(n) По индексу.
python
from selenium.webdriver.support.ui import Select select = Select(driver.find_element(By.ID, "dropdown")) select.select_by_visible_text("Option 1")

Работа с alert/confirm/prompt

Метод Описание
driver.switch_to.alert Переключение на окно alert.
.accept() Подтвердить.
.dismiss() Отклонить.
.text Получить текст окна.
.send_keys("текст") Ввод в prompt.

Загрузка файлов

Метод Описание
.send_keys("path") Указание пути к файлу для <input type="file">.
python
upload = driver.find_element(By.ID, "upload") upload.send_keys("/path/to/file.txt")

Скроллинг и 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("--