JavaRush /Курси /Python SELF UA /Налаштування скрипта для автоматизації послідовності дій ...

Налаштування скрипта для автоматизації послідовності дій на сайті

Python SELF UA
Рівень 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().
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ