JavaRush /Курси /Python SELF UA /Завершення роботи та тестування скрипта

Завершення роботи та тестування скрипта

Python SELF UA
Рівень 36 , Лекція 4
Відкрита

1. Завершення сесії

Як коректно завершити сесію роботи браузера

Отже, у вас чудовий скрипт, що збирає дані, натискає кнопки і робить багато магічних речей у браузері. Тепер важливо коректно завершити його роботу. Уявіть, що ваш браузер — це неквапливий слон: ви не можете просто грюкнути дверима і піти. Ви маєте ввічливо і спокійно завершити його роботу. Для цього використовуйте метод quit().

Python

from selenium import webdriver

# Ініціалізація драйвера браузера
driver = webdriver.Chrome()

# тут відбувається ваша магія браузера... 🧙‍♂️

# Завершення роботи браузера
driver.quit()

Метод quit() закриває всі вікна браузера і завершує його роботу. Якщо ви забудете викликати цей метод, можуть початися дивні історії з відкритим браузером у фоні та незрозумілими витоками пам’яті. А щасливе життя, погодьтесь, хочеться всім.

Розв’язання проблем із завислими процесами браузера

Іноді після роботи з Selenium процеси браузера продовжують «висіти» у фоновому режимі, наче нерішучі юніти у стратегії в реальному часі. Це може статися, наприклад, якщо ваш скрипт «гепнувся» десь посередині. Один зі способів впоратися з цією проблемою — це використання пакетного завершення процесу, наприклад, за допомогою psutil у Python або інших системних команд.

Python

import psutil

# Закриття всіх завислих процесів Chrome
for proc in psutil.process_iter():
    # Перевіряємо, чи належить процес браузеру
    if 'chrome' in proc.name().lower():
        proc.kill()

Це не найелегантніший спосіб, але іноді іншого варіанту немає, якщо процеси стають некерованими. Пам’ятайте, що при цьому ви «вб’єте» всі процеси браузера, тому використовуйте зі здоровим глуздом.

2. Тестування скрипта

Перевірка правильності виконання всіх кроків у сценарії

Успішне завершення роботи скрипта — це лише половина справи. Важливо перевірити, що кожен крок виконується коректно. Для цієї мети чудово підходять інструменти тестування програмного забезпечення, такі як unittest або pytest. Ви можете писати тести, щоб упевнитися, що ваш скрипт коректно відкриває сторінки, клікає кнопки і збирає дані.

Розглянемо мінімалістичний тест з використанням unittest:

Python

import unittest
from selenium import webdriver

class TestBrowserAutomation(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_open_page(self):
        self.driver.get("https://example.com")
        self.assertEqual("Example Domain", self.driver.title)

    def tearDown(self):
        self.driver.quit()

unittest.main()

Цей тест перевіряє, що наш скрипт відкриває сторінку https://example.com і заголовок сторінки відповідає очікуванням. Це простий, але потужний спосіб упевнитися, що ключові частини вашого скрипта працюють правильно.

Налагодження та оптимізація

Іноді навіть після написання тестів ваш скрипт поводиться, як примхлива дитина, відмовляючись працювати правильно. Тут на сцену виходить налагодження. Використовуйте print() для виведення проміжних значень, щоб відстежити, де саме щось пішло не так. Вкраплення веселих коментарів у код, звісно ж, вітаються, але не забувайте про мету: зрозуміти, що відбувається.

Наприклад, ви зіткнулися з проблемою, що some_element відсутній на сторінці:

Python

try:
    some_element = driver.find_element_by_id('missing-id')
except Exception as e:
    print(f"Whoops! Щось пішло не так: {e}")

Крім того, уважно стежте за продуктивністю вашого скрипта. Іноді, щоб оптимізувати роботу, можна використовувати різні стратегії, такі як зменшення частоти запитів або оптимізація логіки пошуку елементів.

Запобігання збоям і помилкам у майбутньому

Після оптимізації та налагодження ваш скрипт має працювати бездоганно, як швейцарський годинник, але завжди є ризик виникнення нових проблем. Ви можете використовувати системи логування, такі як logging, щоб записувати, що відбувається у вашому скрипті. Це дозволить бачити, де і чому щось пішло не так.

Python

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info("Початок роботи скрипта")

# log more actions here...

logger.info("Завершення роботи скрипта")

Пам’ятайте, що завжди варто передбачати неочікуванні події, особливо якщо ви працюєте з нестабільними даними або сторінками. Розгляньте впровадження системи ретраїв і таймаутів, щоб скрипт не падав за першої ж помилки.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ