Урок 26. Создание модульного Selenium-проекта и организация кода
Когда скрипты становятся сложными, важно правильно организовать код. Модульная структура упрощает поддержку, тестирование и повторное использование функций. В этом уроке мы разберём, как создать Selenium-проект с разделением на модули и папки.
Почему важна модульность
- Повторное использование: функции для поиска элементов, заполнения форм или логирования можно использовать в нескольких скриптах.
- Упрощение тестирования: легче тестировать отдельные функции, чем весь монолитный скрипт.
- Поддержка и масштабирование: проект становится читаемым и легко расширяемым.
Структура проекта
Пример базовой структуры проекта Selenium:
selenium_project/ │ ├── main.py # Основной скрипт ├── pages/ # Модуль с классами страниц (Page Object) │ ├── base_page.py │ ├── login_page.py │ └── dashboard_page.py ├── utils/ # Вспомогательные функции │ ├── browser.py │ ├── logger.py │ └── helpers.py ├── tests/ # Тестовые скрипты │ ├── test_login.py │ └── test_dashboard.py └── requirements.txt # Зависимости проекта
Пример модуля для работы с браузером
from selenium import webdriver
def create_driver(headless=False):
options = webdriver.ChromeOptions()
if headless:
options.add_argument("--headless")
options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=options)
return driver
Пример модуля с логированием
import logging
def setup_logger(log_file="selenium_project.log"):
logging.basicConfig(
filename=log_file,
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
return logging
Пример Page Object для страницы входа
from selenium.webdriver.common.by import By
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_input = (By.ID, "username")
self.password_input = (By.ID, "password")
self.login_button = (By.XPATH, "//button[@type='submit']")
def login(self, username, password):
self.driver.find_element(*self.username_input).send_keys(username)
self.driver.find_element(*self.password_input).send_keys(password)
self.driver.find_element(*self.login_button).click()
Основной скрипт с использованием модулей
from utils.browser import create_driver
from utils.logger import setup_logger
from pages.login_page import LoginPage
log = setup_logger()
driver = create_driver(headless=False)
try:
driver.get("https://example.com/login")
login_page = LoginPage(driver)
login_page.login("ivan", "password123")
log.info("Вход выполнен успешно")
except Exception as e:
log.error("Ошибка: %s", e)
finally:
driver.quit()
log.info("Браузер закрыт")
Модульная структура упрощает развитие проекта, облегчает тестирование и позволяет поддерживать чистоту кода. Использование Page Object, модулей для браузера, логирования и вспомогательных функций делает проект более профессиональным и масштабируемым.
Больше уроков по парсингу на parsertools.ru/lessons.
