Демонстрация опций prefs и DevTools Selenium для настройки браузера
Этот пример демонстрирует, как использовать библиотеку Selenium для запуска браузера Chrome с настройками через prefs и DevTools, такими как отключение загрузки изображений, уведомлений, менеджера паролей и автоматизации. Код выполняет следующие действия:
- Создание директории для скриншотов: Функция
ensure_screenshot_directory()создаёт папкуscreenshots, если она не существует. - Отображение сообщений: Функция
show_message()показывает всплывающие окна с информацией о текущей опции. - Запуск браузера: Функция
run_browser_with_option()запускает Chrome с указанными настройкамиprefsили DevTools, загружает страницуhttps://parsertools.ru/, делает скриншот и сохраняет его в папкуscreenshots. - Проверка IP-адреса: Используется библиотека
requestsдля получения IP-адреса с сайта и вывода его в консоль. - Перебор опций: Основной цикл проходит по списку
available_options, применяя каждую опцию с задержкой в 3 секунды между запусками и задержкой перед закрытием окна в 15 секунд. - Обработка ошибок: Код включает обработку исключений для случаев, когда браузер не запускается или возникают проблемы при загрузке страницы.
Каждая опция сопровождается описанием, а результат работы — скриншот страницы с именем, соответствующим опции.
Урок по этой теме с описанием можно посмотреть здесь.
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
import requests # Для получения IP-адреса с сайта
# Задержка между запусками в секундах
DELAY = 3
# Список опций prefs и DevTools для настройки браузера
available_options = [
(
{"prefs": {
"profile.default_content_settings.images": 2,
"profile.managed_default_content_settings.images": 2
}},
"Отключение загрузки изображений"
),
(
{"prefs": {
"profile.default_content_setting_values.notifications": 2
}},
"Отключение уведомлений"
),
(
{"prefs": {
"credentials_enable_service": False,
"profile.password_manager_enabled": False
}},
"Отключение менеджера паролей"
),
(
{
"useAutomationExtension": False,
"excludeSwitches": ["enable-automation"]
},
"Отключение расширения автоматизации и уведомления об автоматизации"
)
]
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, option, desc):
"""Запускает браузер с выбранной опцией и делает скриншот."""
# Показываем всплывающее окно с текущей задачей
show_message("Текущая задача", f"Опция: {desc}\nОписание: {desc}")
print(f"\n=== Запуск браузера с опцией: {desc} ===")
# Настройка Chrome с выбранной опцией
opts = webdriver.ChromeOptions()
if "prefs" in option:
opts.add_experimental_option("prefs", option["prefs"])
elif "excludeSwitches" in option:
opts.add_experimental_option("excludeSwitches", option["excludeSwitches"])
elif "useAutomationExtension" in option:
opts.add_experimental_option("useAutomationExtension", option["useAutomationExtension"])
try:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=opts)
except WebDriverException as e:
print(f"🚫 Ошибка при запуске браузера с опцией '{desc}': {e}")
return
try:
url = "https://parsertools.ru/"
print(f"📄 Загружаем страницу: {url}")
driver.get(url)
time.sleep(15) # Ждём загрузки страницы
# Получаем IP-адрес с сайта
try:
response = requests.get(url)
if response.status_code == 200:
print(f"🏷️ IP-адрес, полученный с сайта: {response.json()['origin']}")
else:
print(f"⚠️ Не удалось получить IP-адрес с сайта: {response.status_code}")
except Exception as e:
print(f"⚠️ Ошибка при запросе IP-адреса: {e}")
# Сохраняем скриншот
screenshot_dir = ensure_screenshot_directory()
screenshot_name = f"screenshot_{index}_{desc.replace(' ', '_').replace('(', '').replace(')', '')}.png"
screenshot_path = os.path.join(screenshot_dir, screenshot_name)
driver.save_screenshot(screenshot_path)
print(f"📸 Скриншот сохранён: {screenshot_path}")
except Exception as e:
print(f"🚫 Ошибка при работе с браузером: {e}")
finally:
driver.quit()
print("🔌 Браузер закрыт.")
if __name__ == "__main__":
# Приветственное сообщение
print("🎉 Добро пожаловать в демонстрацию опций prefs и DevTools Selenium!")
print(f"Каждая опция будет запущена с задержкой в {DELAY} секунд.\n")
# Перебираем все опции prefs и DevTools
for i, (option, desc) in enumerate(available_options, start=1):
run_browser_with_option(i, option, desc)
print(f"\n⏳ Ожидание {DELAY} секунд перед следующим запуском...")
time.sleep(DELAY)
print("\n🎉 Все опции prefs и DevTools протестированы! Проверьте папку 'screenshots' для результатов.")
