Демонстрация опций оптимизации Selenium для настройки браузера

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

  1. Создание директории для скриншотов: Функция ensure_screenshot_directory() создаёт папку screenshots, если она не существует.
  2. Отображение сообщений: Функция show_message() показывает всплывающие окна с информацией о текущей опции.
  3. Запуск браузера: Функция run_browser_with_option() запускает Chrome с указанной опцией оптимизации, загружает страницу https://parsertools.ru/, делает скриншот и сохраняет его в папку screenshots.
  4. Перебор опций: Основной цикл проходит по списку available_options, применяя каждую опцию с задержкой в 3 секунды между запусками и задержкой перед закрытием окна в 15 секунд.
  5. Обработка ошибок: Код включает обработку исключений для случаев, когда браузер не запускается или возникают проблемы при загрузке страницы.

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

Урок по этой теме с описанием можно посмотреть здесь.

import os
import time
import tkinter as tk
from tkinter import messagebox
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.common.exceptions import WebDriverException
from webdriver_manager.chrome import ChromeDriverManager

# Задержка между запусками в секундах
DELAY = 3

# Список опций оптимизации для настройки браузера
available_options = [
    ("--blink-settings=imagesEnabled=false", "Отключение загрузки изображений"),
    ("--disable-popup-blocking", "Отключение блокировщика всплывающих окон"),
    ("--disable-notifications", "Отключение уведомлений"),
    ("--mute-audio", "Отключение звука"),
    ("--disable-translate", "Отключение автоперевода страниц"),
    ("--disable-features=VizDisplayCompositor", "Отключение VizDisplayCompositor для оптимизации в headless")
]

def ensure_screenshot_directory():
    """Создаёт директорию screenshots, если она не существует."""
    screenshot_dir = os.path.abspath("screenshots")
    if not os.path.exists(screenshot_dir):
        os.makedirs(screenshot_dir)
    return screenshot_dir

def show_message(title, message):
    """Отображает всплывающее окно с указанным заголовком и сообщением."""
    root = tk.Tk()
    root.withdraw()  # Скрываем основное окно
    messagebox.showinfo(title, message)
    root.destroy()

def run_browser_with_option(index, arg, desc):
    """Запускает браузер с выбранной опцией и делает скриншот."""
    # Показываем всплывающее окно с текущей задачей
    show_message("Текущая задача", f"Запуск с опцией: {arg}\nОписание: {desc}")

    print(f"\n=== Запуск браузера с опцией: {arg} ({desc}) ===")

    # Настройка Chrome с выбранной опцией
    opts = webdriver.ChromeOptions()
    opts.add_argument(arg)

    try:
        driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)
    except WebDriverException as e:
        print(f"🚫 Ошибка при запуске браузера с опцией '{arg}': {e}")
        return

    try:
        url = "https://parsertools.ru/"
        print(f"📄 Загружаем страницу: {url}")
        driver.get(url)
        time.sleep(15)  # Ждём загрузки страницы

        # Получаем заголовок страницы
        print(f"🏷️ Заголовок страницы: {driver.title}")

        # Сохраняем скриншот
        screenshot_dir = ensure_screenshot_directory()
        screenshot_path = os.path.join(screenshot_dir, f"screenshot_{index}_{arg.replace('--','')}.png")
        driver.save_screenshot(screenshot_path)
        print(f"📸 Скриншот сохранён: {screenshot_path}")

    except Exception as e:
        print(f"🚫 Ошибка при работе с браузером: {e}")
    finally:
        driver.quit()
        print("🔌 Браузер закрыт.")

if __name__ == "__main__":
    # Приветственное сообщение
    print("🎉 Добро пожаловать в демонстрацию опций оптимизации Selenium!")
    print(f"Каждая опция будет запущена с задержкой в {DELAY} секунд.\n")

    # Перебираем все опции оптимизации
    for i, (arg, desc) in enumerate(available_options, start=1):
        run_browser_with_option(i, arg, desc)
        print(f"\n⏳ Ожидание {DELAY} секунд перед следующим запуском...")
        time.sleep(DELAY)

    print("\n🎉 Все опции оптимизации протестированы! Проверьте папку 'screenshots' для результатов.")