Основные опции 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
--disable-infobarsОтключает уведомление «Chrome is being controlled by automated test software», которое появляется в верхней части окна браузера при использовании Selenium. Это делает работу браузера более «естественной» и менее заметной для скриншотов или автоматизации. Многие сайты могут распознавать это уведомление как признак автоматизации. Поэтому опция помогает повысить уровень «незаметности» бота.
--disable-extensions
Отключает все установленные расширения в браузере. Это ускоряет запуск и снижает вероятность конфликтов, так как расширения могут влиять на работу страниц. Особенно полезно на чистых тестовых окружениях или в CI/CD, где нет необходимости в расширениях. Также помогает минимизировать нагрузку на систему.
--disable-gpu
--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.
