Гид по технологиям

Как автоматизировать Google Chrome с помощью Selenium на Java

7 min read Веб-скрейпинг Обновлено 27 Nov 2025
Selenium + Chrome: автоматизация на Java
Selenium + Chrome: автоматизация на Java

Веб-краулер с Selenium в браузере Chrome

Selenium — это связующий компонент между вашей программой и браузером, который позволяет автоматизировать действия в Chrome так, как если бы это делал пользователь. Это особенно полезно для сайтов, интенсивно использующих JavaScript, где классические HTML-скрейперы (например, Scrapy) не справляются.

Основные шаги, о которых пойдёт речь:

  • Установка Selenium и ChromeDriver
  • Использование Инспектора Google Chrome для поиска элементов
  • Примеры кода на Java: простая сессия, поиск в Google, чтение писем в Gmail
  • Практические советы: ожидания, выбор селекторов, обработка ошибок, безопасность и приватность

Зачем выбирать Selenium

Selenium управляет полноценным браузером, поэтому:

  • JavaScript выполняется так же, как у пользователя.
  • Можно взаимодействовать с динамическим DOM, всплывающими окнами и элементами, загружаемыми асинхронно.
  • Подходит для сценариев, где нужен полный цикл взаимодействия: вход в аккаунт, клики, загрузка файлов, заполнение форм.

Когда Selenium не подходит: когда требуется массовое и быстрое сканирование статических страниц — в таких случаях лучше headless HTTP-клиент или специализированные парсеры.

Установка Selenium и WebDriver

Кратко: нужно Java, менеджер зависимостей (Maven/Gradle) и соответствующий ChromeDriver, совместимый с версией Chrome.

Важно: версия ChromeDriver должна соответствовать установленной версии браузера Chrome. Несоответствие приведёт к ошибкам при запуске.

WebDriver

Скачайте ChromeDriver с официального сайта Selenium или страницы релизов ChromeDriver, распакуйте ZIP в удобное место, например:

  • Windows: C:\WebDrivers\chromedriver.exe
  • Linux/macOS: /usr/local/bin/chromedriver (сделайте исполняемым)

Оставьте путь к chromedriver в документации проекта или настройках окружения — ниже покажем варианты запуска.

Зависимости Java (Maven)

Добавьте зависимость в файл pom.xml вашего проекта Maven:


  
    org.seleniumhq.selenium
    selenium-java
    3.8.1
  

После этого при сборке Maven подтянет необходимые артефакты.

Первый шаг с Selenium в Java

Пример запуска Chrome и выполнения поиска на google.com.

WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.name("q"));
element.sendKeys("terminator\n");
new WebDriverWait(driver, 10)
  .until(d -> d.getTitle().toLowerCase().startsWith("terminator"));
System.out.println("Title: " + driver.getTitle());
driver.quit();

Ключевые моменты:

  • WebDriverWait помогает дожидаться условий (явных ожиданий) вместо использования Thread.sleep().
  • Метод findElement выбрасывает исключение, если элемент не найден; findElements вернёт пустой список.

Инспектор Google Chrome: как находить элементы

Откройте страницу в Chrome, щёлкните правой кнопкой мыши по интересующему элементу и выберите «Просмотреть» или «Inspect». Во вкладке Elements можно увидеть HTML и классы / атрибуты.

Инспектор Chrome: выделение элемента в Elements для поиска класса summary_text

Например, краткое описание фильма может быть в div с классом summary_text:

Инспектор Chrome: div.summary_text в DOM-дереве страницы IMDb

Используя селектор, можно прямо обратиться к этому узлу.

CSS vs XPath для выбора элементов

Selenium поддерживает оба подхода. Выбор зависит от привычки и структуры страницы.

Пример CSS:

WebElement summaryEl = driver.findElement(By.cssSelector("div.summary_text"));

Пример XPath:

WebElement summaryEl = driver.findElement(By.xpath("//div[@class='summary_text']"));

Совет: если нужно выбрать по части класса (несколько классов в атрибуте class), используйте CSS-селектор с точной последовательностью или XPath с contains(@class, ‘className’).

Чтение Gmail из Java через Selenium — пример

Ниже пример автоматического входа и обхода списка писем. Учтите ограничения (см. раздел о безопасности и приватности).

WebDriver driver = new ChromeDriver();
driver.get("https://gmail.com");
new WebDriverWait(driver, 10)
  .until(d -> d.getTitle().toLowerCase().startsWith("gmail"));

/* Type in username/email */
{
  driver.findElement(By.cssSelector("#identifierId")).sendKeys(email);
  driver.findElement(By.cssSelector(".RveJvd")).click();
}

new WebDriverWait(driver, 10)
  .until(d -> !d.findElements(By.xpath("//div[@id='password']")).isEmpty());

/* Type in password */
{
  driver
    .findElement(By.xpath("//div[@id='password']//input[@type='password']"))
    .sendKeys(password);
  driver.findElement(By.cssSelector(".RveJvd")).click();
}

new WebDriverWait(driver, 10)
  .until(d -> !d.findElements(By.xpath("//div[@class='Cp']")).isEmpty());

List rows = driver
  .findElements(By.xpath("//div[@class='Cp']//table/tbody/tr"));
for (WebElement tr : rows) {
  // From Element
  System.out.println("From: ");
  for (WebElement e : tr.findElements(By.xpath(".//div[@class='yW']/*"))) {
    System.out.println(" " +
      e.getAttribute("email") + ", " +
      e.getAttribute("name") + ", " +
      e.getText());
  }

  // Subject
  System.out.println("Sub: " + tr.findElement(By.xpath(".//div[@class='y6']")).getText());

  // Date/Time
  WebElement dt = tr.findElement(By.xpath("./td[8]/*"));
  System.out.println("Date: " + dt.getAttribute("title") + ", " + dt.getText());
}

System.out.println(rows.size() + " mails.");
driver.quit();

Важно заметить:

  • Gmail активно использует динамику и изменения селекторов; селекторы могут меняться со временем.
  • Google может показывать двухфакторную аутентификацию, капчу или блокировать автоматизированный вход — это обычная практика безопасности.

Практические рекомендации и «чек-лист» перед запуском

Мини-методология: план → локальная отладка → надёжные ожидания → аккуратная обработка исключений → логирование → безопасное хранение учётных данных.

Чек-лист разработчика:

  • Установлен Chrome + соответствующий ChromeDriver
  • Зависимости Selenium добавлены и успешно собираются
  • Локально отлажен сценарий в видимом режиме перед использованием headless
  • Все креды в окружении, не в коде
  • Обработаны варианты MFA/капча

Чек-лист QA:

  • Памятка по регрессиям DOM (тесты на ломку селекторов)
  • Сценарии падения сети и восстановления сессии
  • Ограничения частоты запросов и временные окна

Чек-лист DevOps:

  • Контейнеризация Chrome/ChromeDriver или запуск на CI-агенте с GUI или headless
  • Мониторинг использования памяти и утечек браузерных процессов
  • Права доступа к секретам и логам

Критерии приёмки

  • Скрипт успешно открывает страницу, выполняет вход (если применимо) и извлекает нужные данные в 90% тестовых сценариев (без капчи/MFA).
  • Код не хранит пароли в репозитории и использует переменные окружения или менеджер секретов.
  • Обработка ошибок покрывает таймауты и неожиданные изменениях DOM.

Когда Selenium не подходит (контрпримеры)

  • Вам нужно массово сканировать десятки тысяч статических страниц максимально быстро. В этом случае лучше использовать HTTP-клиенты и парсеры.
  • Требуется официальная и стабильная интеграция с почтой — используйте соответствующие API (Gmail API) вместо эмуляции браузера.
  • Задачи, где автоматизация нарушает правила сервиса или законодательство — не используйте Selenium.

Альтернативы и подходы

  • Gmail API с OAuth2 — официально поддерживаемый способ чтения почты и работы с письмами.
  • Headless браузеры (Puppeteer, Playwright) — современные инструменты с удобными API, особенно в Node.js-экосистеме.
  • HTTP-клиенты + парсеры (Jsoup для Java) — когда JavaScript не требуется.

Безопасность и приватность

  • Никогда не храните пароли в коде. Используйте переменные окружения, зашифрованные хранилища секретов или менеджеры секретов (HashiCorp Vault, AWS Secrets Manager и т.п.).
  • Чтение почты через автоматизированный браузер затрагивает персональные данные — соблюдайте правила конфиденциальности и законы (например, GDPR) при обработке личных данных.
  • Если доступ к аккаунту осуществляется программно, предпочтительнее использовать официальный API с OAuth и ограниченными правами доступа.
  • Автоматизированный вход может быть блокирован Google: будьте готовы к MFA, капчам и временным блокировкам.

Отладка и устойчивость: хитрости

  • Используйте эксплицитные ожидания (WebDriverWait) вместо Thread.sleep().
  • Ловите StaleElementReferenceException: элемент мог исчезнуть из DOM между поиском и использованием — выполняйте повторный поиск.
  • Для динамических таблиц используйте ожидание наличия строк, а затем для каждой строки отдельный поиск вложенных элементов.
  • Логи браузера и скриншоты при ошибках помогают диагностировать проблемы.

Советы по совместимости и миграции

  • При обновлении Chrome обновляйте и ChromeDriver под ту же версию; в CI можно установить соответствие версий автоматически.
  • Рассмотрите контейнеры с заранее установленными совместимыми бинарниками (пример: Docker-образы с Chrome и ChromeDriver).

Тест-кейсы и приёмка (кратко)

  • TC-1: Открыть google.com → найти поле поиска → выполнить запрос → заголовок содержит поисковый запрос.
  • TC-2: Открыть gmail.com → ввести email → перейти на ввод пароля → обработать MFA / капчу как «тест пропущен/требует вмешательства».
  • TC-3: Извлечь список писем → проверить, что количество строк > 0 для почтового аккаунта с письмами.

Шпаргалка селекторов и ожиданий (Cheat sheet)

  • По имени: By.name(“q”)
  • По id: By.id(“identifierId”) или css: “#identifierId”
  • По классу: By.className(“someClass”) или css: “.someClass”
  • CSS сложный: By.cssSelector(“div.container > ul > li:nth-child(2) a”)
  • XPath пример: By.xpath(“//div[@class=’yW’]/*”)
  • Ожидание заголовка: new WebDriverWait(driver, 10).until(d -> d.getTitle().startsWith(“…”));

Рекомендации по развертыванию

  • Для запуска в CI: используйте headless-режим, контейнеры с Chrome и ChromeDriver, мониторьте ресурсы и вычищайте процессы браузера по завершении.
  • Для долгих задач: периодически перезапускайте сессии и лимитируйте частоту обращений к целевому сайту.

Короткая памятка (100–200 слов) — анонс для команды

Selenium + ChromeDriver позволяет автоматизировать взаимодействие с сайтами, которые активно используют JavaScript. Для задач интеграции с веб-интерфейсом используйте Selenium; для официальной работы с почтой предпочтительнее Gmail API. Храните учетные данные безопасно, применяйте явные ожидания и тестируйте селекторы на стабильность. В CI запускайте в контейнерах и следите за совместимостью версий Chrome и ChromeDriver.

Часто задаваемые вопросы

Можно ли читать Gmail с помощью Selenium вместо Gmail API?

Да, технически можно, но это менее надёжно и может нарушать ограничения сервисов. Лучше использовать официальное API, если требуются стабильность и соответствие правилам.

Как безопасно хранить логин и пароль для автоматизации?

Используйте переменные окружения, зашифрованные хранилища секретов или менеджеры секретов; не храните пароли в репозитории.

Что делать, если селекторы ломаются после обновления сайта?

Вынесите селекторы в отдельный слой конфигурации, добавьте тесты регрессии и используйте более устойчивые XPath/CSS (например, по data-атрибутам).

Если у вас есть проекты, которым подходит Selenium, или вы столкнулись с конкретными проблемами — опишите в комментариях: окружение, цель и ошибки, и мы поможем с диагностикой.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Google Assistant на Galaxy Watch 4 — как установить
умные часы

Google Assistant на Galaxy Watch 4 — как установить

Трассировка изображений в Illustrator
Графический Дизайн

Трассировка изображений в Illustrator

Отправка денег через Facebook Messenger
Руководство

Отправка денег через Facebook Messenger

Почему Nintendo Switch не включается — руководство
Гаджеты

Почему Nintendo Switch не включается — руководство

Точка доступа Wi‑Fi на iPhone и Android — настройка
Руководство

Точка доступа Wi‑Fi на iPhone и Android — настройка

Вернуть полную ёмкость SD‑карты Raspberry Pi
Руководство

Вернуть полную ёмкость SD‑карты Raspberry Pi