Если ты хоть раз сталкивался с рутиной проверки верстки, тестированием форм или парсингом данных с сайтов, то наверняка слышал про Selenium. Это не просто очередная библиотека для автоматизации браузера — это твой персональный бот, который может делать почти всё, что ты делаешь руками: кликать, скроллить, логиниться, даже ждать загрузки AJAX. А если ты автоматизируешь тесты или хочешь быстро проверить, как сайт работает в разных браузерах — Selenium твой лучший друг.
Возможности Selenium + Python
- Автоматизация браузера: Chrome, Firefox, Edge, Safari и даже headless-режим.
- Заполнение форм, клик по кнопкам, работа с выпадающими списками.
- Скриншоты, прокрутка, работа с куками и локальным хранилищем.
- Тестирование UI, интеграция с pytest, unittest, CI/CD пайплайнами.
- Работа с динамическими страницами (AJAX, SPA).
Что требуется (требования, ОС, железо)
- ОС: Windows, Linux, macOS — работает везде.
- Python: 3.7+ (рекомендую всегда использовать последние минорные версии).
- Браузер: Любой современный. Для headless — Chrome/Chromium или Firefox.
- WebDriver: Специальный драйвер под твой браузер (например, chromedriver для Chrome).
- Железо: Любой современный ноут/сервер. На CI/CD можно запускать в headless, даже на VPS без GUI.
Установка — пошаговая инструкция
Самый важный и часто ломающий мозг этап. Вот как сделать всё правильно:
- Установи Python и pip (если ещё нет).
python --version
иpip --version
должны работать из консоли. - Создай виртуальное окружение (опционально, но очень советую):
python -m venv venv
source venv/bin/activate
(Linux/Mac) илиvenv\Scripts\activate
(Windows) - Ставим сам Selenium:
pip install selenium
- Скачай WebDriver для своего браузера:
ВАЖНО: Версия WebDriver должна совпадать с версией браузера!
Распакуй драйвер и положи его в папку, которая есть в PATH, или укажи полный путь в коде. - Проверь установку:
python from selenium import webdriver driver = webdriver.Chrome() # или Firefox(), Edge() driver.get('https://google.com') driver.quit()
Если браузер открылся и закрылся — всё ок!
Подробнее в официальной инструкции.
Использование: команды и варианты
Вот базовые штуки, которые ты будешь юзать 99% времени:
- Запуск браузера:
from selenium import webdriver driver = webdriver.Chrome() # можно указать options
- Открыть страницу:
driver.get('https://example.com')
- Поиск элементов:
driver.find_element('id', 'myid')
driver.find_element('name', 'username')
driver.find_element('xpath', '//button[@type="submit"]')
driver.find_element('css selector', '.btn.btn-primary')
- Аналогично
find_elements
— для списка.
- Ввод текста:
input = driver.find_element('name', 'q') input.send_keys('Selenium Python')
- Клик мышкой:
button = driver.find_element('xpath', '//button') button.click()
- Получить текст:
element.text
- Скриншот:
driver.save_screenshot('screen.png')
- Ждать элемент (очень важно для SPA!):
from selenium.webdriver.common.by import By 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, "myid")) )
- Закрыть браузер:
driver.quit()
Есть ещё куча всего: работа с cookies, переключение между окнами/фреймами, выполнение JS, headless-режим. Документация: https://selenium-python.readthedocs.io/
Ошибки и как делать не надо
- Не ставь WebDriver «на глазок», всегда смотри версию браузера! Иначе «SessionNotCreatedException».
- Не используй time.sleep() для ожидания загрузки элементов. Используй WebDriverWait — это реально спасает от рандомных фейлов.
- Не хардкоди пути к WebDriver — лучше добавь его в PATH или используй
webdriver-manager
(https://github.com/SergeyPirogov/webdriver_manager). - Не забывай закрывать браузер (
driver.quit()
), иначе будет зоопарк из зомби-процессов. - Не храни пароли в коде — используй переменные окружения или секреты.
Пример реального использования в окружении
Допустим, надо автоматом логиниться в админку, проверять статус заказа и делать скриншот. Вот пример:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://myshop.local/admin')
driver.find_element('name', 'username').send_keys('admin')
driver.find_element('name', 'password').send_keys('supersecret')
driver.find_element('css selector', 'button[type="submit"]').click()
# Ждем, пока появится элемент "Статус заказа"
status = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, '//span[@id="order_status"]'))
)
print('Статус заказа:', status.text)
driver.save_screenshot('order_status.png')
driver.quit()
В реальных проектах всё это можно обернуть в pytest-фреймворк, запускать в CI (например, GitHub Actions, GitLab CI, Jenkins). Для headless-режима добавь опции:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
Заключение
Selenium — это не просто костыль для парсинга, а полноценный инструмент для автоматизации браузера и тестирования UI. Если всё делать с умом (а не через time.sleep и copy-paste из stackoverflow), то получится мощная и надежная штука, которая экономит часы работы и нервы. Документация — твой друг: https://selenium-python.readthedocs.io/. Если что-то не работает — смотри логи, гугли ошибки, и не забывай обновлять WebDriver!
P.S. Если нужна интеграция с CI, смотри GitHub Actions или GitLab CI примеры.
Ваш отзыв