Основные опции Selenium для веб-парсинга

Использование основных опций Selenium для настройки браузера при веб-парсинге. Мы разберём, как применять опции, такие как headless-режим, размер окна и отключение расширений, для парсинга элементов <address> с классом email на странице parsertools.ru/test.

Что такое Selenium?

Selenium — инструмент для автоматизации веб-браузеров, идеально подходящий для веб-парсинга динамических страниц. Опции Options позволяют настроить поведение браузера, улучшая производительность и скрытность.

Установка библиотек

Установите Python (версия 3.6+). Выполните команду в терминале:

pip install selenium webdriver-manager

Основные опции

Основные опции настраивают базовое поведение браузера:

--headless

Эта опция запускает браузер без графического интерфейса, то есть окно Chrome не будет отображаться на экране. Она особенно полезна для серверов или систем без установленной графической оболочки (например, Linux-серверов). Также позволяет экономить ресурсы, так как не нужно отрисовывать интерфейс. При этом функционал браузера сохраняется, и можно выполнять все те же действия, что и в обычном режиме.

--start-maximized

При запуске браузера окно автоматически разворачивается на весь экран. Это удобно, когда тесты или парсеры зависят от размеров окна, так как элементы могут отображаться по-разному при маленьком разрешении. Особенно актуально для работы с сайтами, где верстка «ломается» в мобильном или сжатом режиме. Таким образом, можно имитировать полноценное поведение пользователя на десктопе.

--window-size=ШИРИНА,ВЫСОТА

Эта настройка позволяет задать точные размеры окна браузера (например, --window-size=1920,1080). Полезна, если нужно тестировать верстку на разных разрешениях экрана или эмулировать определенные устройства. Иногда сайты подгружают различный контент в зависимости от размеров окна. Задание фиксированного размера делает результаты тестов стабильными и воспроизводимыми.

--incognito

Запускает браузер в режиме инкогнито. В этом режиме не сохраняются куки, история посещений и кэш, что делает каждый запуск более «чистым». Это особенно полезно при парсинге, чтобы избежать влияния прошлых сессий и кэшированных данных. Также можно имитировать заход «нового пользователя» на сайт.

--disable-infobars

Отключает уведомление «Chrome is being controlled by automated test software», которое появляется в верхней части окна браузера при использовании Selenium. Это делает работу браузера более «естественной» и менее заметной для скриншотов или автоматизации. Многие сайты могут распознавать это уведомление как признак автоматизации. Поэтому опция помогает повысить уровень «незаметности» бота.

--disable-extensions

Отключает все установленные расширения в браузере. Это ускоряет запуск и снижает вероятность конфликтов, так как расширения могут влиять на работу страниц. Особенно полезно на чистых тестовых окружениях или в CI/CD, где нет необходимости в расширениях. Также помогает минимизировать нагрузку на систему.

--disable-gpu

Отключает использование графического процессора (GPU) для рендеринга страниц. Опция полезна для Windows, так как в headless-режиме GPU иногда вызывает ошибки или нестабильность. Без GPU браузер работает более предсказуемо в средах автоматизации. На Linux и macOS её необходимость минимальна, но для Windows рекомендуется.

--no-sandbox

Отключает механизм «песочницы» Chrome, который изолирует процессы браузера для безопасности. Эта опция нужна в CI/CD и контейнерах (например, Docker), где sandbox может мешать запуску. Однако стоит учитывать, что при её использовании уровень безопасности снижается. Поэтому включают её только там, где без этого браузер не стартует.

--disable-dev-shm-usage

По умолчанию Chrome использует /dev/shm (shared memory) для хранения временных файлов. В Docker-контейнерах или на системах с ограниченной памятью это может приводить к ошибкам «No space left on device». Опция заставляет Chrome использовать /tmp вместо /dev/shm, что решает проблему. Часто применяется в автоматизированных тестах на Linux.

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

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

Извлечём текст из элементов <address> с классом email с использованием основных опций:

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 с основными опциями
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # Без окна браузера
options.add_argument('--start-maximized')  # Развернутое окно
options.add_argument('--window-size=1920,1080')  # Размер окна
options.add_argument('--incognito')  # Режим инкогнито
options.add_argument('--disable-infobars')  # Без уведомления об автоматизации
options.add_argument('--disable-extensions')  # Без расширений
options.add_argument('--disable-gpu')  # Без GPU
options.add_argument('--no-sandbox')  # Без sandbox
options.add_argument('--disable-dev-shm-usage')  # Использовать /tmp

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
url = "https://parsertools.ru/test/"
try:
    driver.get(url)
    time.sleep(3)  # Ждём 3 секунды для загрузки
    # Находим элементы с классом email
    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()

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

  • Импорт библиотек: selenium и webdriver_manager для автоматизации и управления драйвером.
  • Настройка опций: ChromeOptions задаёт параметры браузера, такие как headless-режим и размер окна.
  • Запрос страницы: driver.get(url) загружает страницу, time.sleep(3) ждёт загрузки.
  • Парсинг: find_elements(By.CLASS_NAME, 'email') находит элементы <address> с классом email, выводит их текст.
  • Закрытие браузера: driver.quit() завершает сессию.

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

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

Результат:

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

Оптимизация

  • Явное ожидание: Замените time.sleep() на WebDriverWait.
  • Фильтрация: Используйте By.CSS_SELECTOR, 'address.email'.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

try:
    driver.get(url)
    WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CLASS_NAME, 'email')))
except Exception as e:
    print(f"Ошибка: {e}")
finally:
    driver.quit()

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

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

Ограничения

  • Производительность: Headless-режим может быть медленнее на некоторых системах.
  • Совместимость: Убедитесь, что драйвер соответствует версии Chrome.

Альтернативы

  • BeautifulSoup: Для статических страниц.
  • Puppeteer: Для Node.js.
  • Playwright: Современная альтернатива.

Заключение

Основные опции Selenium позволяют настроить браузер для эффективного веб-парсинга. Экспериментируйте с параметрами на parsertools.ru/test.

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