JavaRush /Курсы /Python SELF /Настройка скрипта для автоматизации последовательности де...

Настройка скрипта для автоматизации последовательности действий на сайте

Python SELF
37 уровень , 4 лекция
Открыта

1. Сценарий действий и его последовательность

Когда мы начинаем планировать сценарий автоматизации, важно понимать, что, как в сказках, нужно идти от простого к сложному. Представьте себе, что ваш скрипт — это герой, который отправляется в путешествие по страницам веб-сайта. Каждый шаг продуман и четко настроен, чтобы не сбиться с пути.

Создание пошагового сценария автоматизации

Начать нужно с составления плана. Что вы хотите достичь? Загрузить страницу, заполнить форму, кликнуть на кнопку? Как это говорят: "Кто не планирует, тот планирует провал". Мы не хотим провала, так что давайте распишем предполагаемые шаги.

Python

from selenium import webdriver
from selenium.webdriver.common.by import By

# Создаём экземпляр драйвера. Используйте драйвер, который подходит для вашего браузера.
driver = webdriver.Chrome()

# Открываем страницу
driver.get('https://example.com/login')

# Заполняем логин
driver.find_element(By.NAME, 'username').send_keys('my_username')

# Заполняем пароль
driver.find_element(By.NAME, 'password').send_keys('my_secure_password')

# Нажимаем кнопку логина
driver.find_element(By.ID, 'login-button').click()

Вот мы и задаем ритм нашему танцу. Каждый шаг сценария выполняется последовательно, чтобы ваш скрипт мог с лёгкостью перемещаться по сайту.

Логирование шагов выполнения

Как всякий уважающий себя герой, наш скрипт должен оставлять следы, чтобы мы знали, где он был и что делал. Логирование — это как дневник вашего скрипта. Оно помогает отследить выполнение шагов и выявить ошибки, если что-то пойдет не так.

Python

import logging

# Настраиваем логирование
logging.basicConfig(level=logging.INFO)

# Пример логирования действия
logging.info("Открываем страницу входа")
driver.get('https://example.com/login')

Логирование не только помогает в отладке, но и дает спокойствие, зная, что ваш скрипт выполняет каждый шаг как положено. Если вдруг что-то пойдет не так, вы сможете вернутся и посмотреть, на каком моменте что-то пошло не так.

2. Организация кода для чтения и модификации

Когда сценарий становится более сложным, важно держать код в порядке. Представьте себе юбилейное торжество с кучей гостей и блюд: если всё не разложить по местам, то получится хаос. В нашем случае — хаос в коде.

Настройка структуры кода

Чтобы делать изменения в коде с минимальными усилиями, ему нужно быть хорошо организованным. Как сортировщик носков, нужно все упорядочить. Используйте функции, чтобы выделить повторяющиеся действия в отдельные блоки.

Python

def login_to_site(driver, username, password):
    logging.info("Вводим логин")
    driver.find_element(By.NAME, 'username').send_keys(username)
    
    logging.info("Вводим пароль")
    driver.find_element(By.NAME, 'password').send_keys(password)
    
    logging.info("Нажимаем кнопку логина")
    driver.find_element(By.ID, 'login-button').click()

# Используем функцию для входа
login_to_site(driver, 'my_username', 'my_secure_password')

Использование функций делает код более собранным и позволяет легко вносить изменения, к примеру, если изменится ID кнопки входа, вы просто измените это в одной функции, а не по всему коду.

3. Пример: Автоматизация процесса покупки на сайте

Представим, что нам нужно настроить автоматизацию процесса покупки на сайте, включающего следующие шаги:

  1. Открытие сайта и вход в учетную запись.
  2. Переход в каталог товаров и добавление товара в корзину.
  3. Переход в корзину и оформление покупки.
Python

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

# Инициализация драйвера с настройками
def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)  # Неявное ожидание
    return driver

# Функция для входа в учетную запись
def login(driver, username, password):
    driver.get("https://example.com")
    driver.find_element_by_id("username").send_keys(username)
    driver.find_element_by_id("password").send_keys(password)
    driver.find_element_by_id("login_button").click()

# Функция для перехода в каталог товаров и добавления товара в корзину
def add_product_to_cart(driver):
    driver.get("https://example.com/catalog")
    product = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "product_item"))
    )
    product.click()

    add_to_cart_button = driver.find_element_by_id("add_to_cart")
    add_to_cart_button.click()

# Функция для перехода в корзину и оформления покупки
def checkout(driver):
    driver.get("https://example.com/cart")
    checkout_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "checkout"))
    )
    checkout_button.click()

# Функция для завершения работы драйвера
def close_driver(driver):
    driver.quit()

# Основной скрипт для выполнения последовательности действий
def main():
    # Настройка данных
    username = "myusername"
    password = "mypassword"
    
    # Инициализация драйвера
    driver = initialize_driver()
    
    try:
        # Вход на сайт
        login(driver, username, password)
        
        # Переход в каталог и добавление товара в корзину
        add_product_to_cart(driver)
        
        # Переход в корзину и оформление покупки
        checkout(driver)
    
    finally:
        # Закрытие драйвера
        close_driver(driver)

# Запуск основного скрипта
main()

Объяснение функций

  1. initialize_driver() — функция для инициализации веб-драйвера. Она устанавливает неявное ожидание для всех элементов и возвращает объект драйвера.
  2. login() — функция для выполнения входа на сайт. Она принимает параметры username и password, которые используются для заполнения формы входа и нажатия кнопки.
  3. add_product_to_cart() — функция для перехода в каталог, выбора продукта и добавления его в корзину.
  4. checkout() — функция для перехода в корзину и оформления покупки.
  5. close_driver() — функция для завершения работы с драйвером.
  6. main() — основная функция, которая управляет последовательностью действий. В ней происходит вызов всех этапов, а также указание данных для входа.

Преимущества такого подхода

  1. Читабельность — каждый этап оформлен в виде отдельной функции, что упрощает понимание кода.
  2. Повторное использование — отдельные функции можно использовать независимо от основного скрипта, например, для выполнения отдельных действий на сайте.
  3. Легкость тестирования — каждый этап можно протестировать отдельно, чтобы убедиться, что все работает корректно.
  4. Гибкость — при необходимости можно добавить другие функции или изменить порядок вызова действий в main().
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ