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

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

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

1. Завершение сессии

Как корректно завершить сессию работы браузера

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

Python

from selenium import webdriver

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

# here your browsing magic happens... 🧙‍♂️

# Завершение работы браузера
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! Something went wrong: {e}")

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

Предотвращение сбоев и ошибок в будущем

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

Python

import logging

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

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

# log more actions here...

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

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

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ