Настройка предпочтений и DevTools в Selenium для веб-парсинга

Этот урок посвящён настройке предпочтений и DevTools в Selenium для управления поведением браузера при веб-парсинге элементов <address> с классом email на странице parsertools.ru/test.

Предпочтения и DevTools

Эти параметры позволяют настраивать поведение браузера через внутренние предпочтения и DevTools, делая автоматизацию более стабильной и «чистой»:

prefs

Позволяет задавать пользовательские предпочтения браузера, например отключение загрузки изображений, уведомлений и автосохранения паролей. Это помогает ускорить работу при парсинге и тестировании, так как лишние элементы не мешают скриптам. Также делает поведение браузера более предсказуемым и стабильным. Используется вместе с опцией add_experimental_option("prefs", prefs). Можно настраивать практически любые параметры профиля через объект prefs.

excludeSwitches

Позволяет исключить некоторые флаги запуска браузера, например уведомление о том, что Chrome управляется автоматизацией. Это делает интерфейс «чистым» и помогает избежать распознавания бота на сайтах. Можно исключать несколько переключателей одновременно. Особенно полезно при создании стабильных скриптов парсинга и тестирования. Настраивается через метод add_experimental_option("excludeSwitches", [...]).

useAutomationExtension

Отключает встроенное расширение автоматизации, которое Chrome подключает при работе с Selenium. Без этой опции сайты могут определить, что браузером управляют скрипты. Отключение расширения повышает «незаметность» автоматизации. Используется вместе с excludeSwitches для полного скрытия факта автоматизации. Особенно актуально при парсинге и обходе антибот-защит.

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

Пример парсинга

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time

# Настройка Selenium с предпочтениями и DevTools
options = webdriver.ChromeOptions()
prefs = {
    "profile.default_content_settings.images": 2,
    "profile.managed_default_content_settings.images": 2,
    "profile.default_content_setting_values.notifications": 2,
    "credentials_enable_service": False,
    "profile.password_manager_enabled": False
}
options.add_experimental_option("prefs", prefs)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
url = "https://parsertools.ru/test/"
try:
    driver.get(url)
    time.sleep(3)
    print("****** Находим элементы с классом email ******")
    address_tags = driver.find_elements(By.CLASS_NAME, 'email')
    if address_tags:
        for i, address in enumerate(address_tags, 1):
            print(f"Элемент {i}: {address.text.strip()}")
    else:
        print("Класс 'email' не найден")
finally:
    driver.quit()

Как работает код

  • Prefs/DevTools: Отключают ненужные функции и уведомления об автоматизации.
  • Парсинг: Извлекает текст из <address> с классом email.

Тестирование

Пример структуры страницы:

Результат:

  • Элемент 1: Автор: admin@parsertools.ru

Оптимизация

  • Явное ожидание: Используйте WebDriverWait.

Этические аспекты

Проверяйте robots.txt, избегайте перегрузки сервера, соблюдайте правила использования данных.

Ограничения

  • Совместимость: Некоторые настройки зависят от версии Chrome.

Заключение

Настройка предпочтений и DevTools в Selenium оптимизирует веб-парсинг. Экспериментируйте на parsertools.ru/test.

Больше уроков по парсингу на parsertools.ru/lessons.