Как обойти CAPTCHA с помощью Selenium на Java

Как обойти CAPTCHA с помощью Selenium на Java

Я нашёл несколько приёмов, которые помогают снизить сложности при работе с CAPTCHA при автоматизации. Независимо от того, используете Селен или с помощью другого инструмента, эти стратегии могут повысить ваши шансы преодолеть это препятствие. Цель не в том, чтобы взломать систему, а в том, чтобы сделать автоматизацию менее сложной и менее затратной по времени, когда приходится иметь дело с CAPTCHA. Давайте рассмотрим варианты.

Понимание CAPTCHA и ее типов

Прежде чем переходить к стратегиям обхода, важно понимать, что CAPTCHA бывают разных видов:

  • Text-based CAPTCHAs: Требуют распознавания искажённого текста.
  • Image-based CAPTCHAs: Требуют выбора определённых объектов из набора изображений.
  • ReCAPTCHA v2 и v3: CAPTCHA от Google опираются на поведение пользователя, чтобы отличать людей от ботов.

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

Простое решение CAPTCHA

Прежде чем мы глубже погрузимся в работу с CAPTCHA в Selenium на Java, я хочу познакомить вас с одними из лучших доступных сейчас сервисов для решения CAPTCHA. Вы можете ознакомьтесь с лучшими сервисами для решения CAPTCHA здесь.

Если не хотите читать подробно, вот итоговый список:

  1. Bright Data CAPTCHA Solver — Robust proxy-based solver; handles complex CAPTCHAs with high accuracy.
  2. BypassCaptcha — Simple integration; supports multiple languages and reCAPTCHA handling.
  3. 2captcha — Human-powered service; supports diverse CAPTCHAs and is cost-effective.
  4. CapSolver — Быстрый сервис решения CAPTCHA с доступной ценой для массовых задач.
  5. Anticaptcha — Fast response and global human solvers; effective for reCAPTCHA.
  6. Best Captcha Solver — Human-based solution with 24/7 support; known for reliable results.

Справятся ли Selenium и Java с CAPTCHA?

Selenium на Java может работать с CAPTCHA, но подход зависит от сайта. Некоторые сайты показывают CAPTCHA только при обнаружении подозрительной активности ботов, тогда как другие сразу используют CAPTCHA, чтобы блокировать автоматический доступ.

В первом случае можно избежать CAPTCHA, имитируя естественное поведение при просмотре сайтов, чтобы не привлекать внимание. Во втором CAPTCHA должен решить человек.

Хотя Selenium можно использовать в обоих случаях, стабильно решать CAPTCHA в масштабе сложно. Поэтому эффективнее сосредоточиться на том, чтобы CAPTCHA вообще не появлялись. Давайте разберёмся, как избежать этих проблем при использовании Selenium для автоматизации.

Подход 1: Использование сервисов anti-CAPTCHA

Один из наиболее распространённых методов — использование сторонних anti-CAPTCHA-сервисов, таких как:

  • 2Captcha
  • AntiCaptcha
  • DeathByCaptcha

Эти сервисы используют API для решения CAPTCHA, передавая их операторам для ручного решения. Интеграция таких сервисов с Selenium на Java довольно проста. Вот простой фрагмент кода:

// Import required libraries
импорт org.openqa.selenium.WebDriver;
импорт org.openqa.selenium.chrome.ChromeDriver;
public класс BypassCaptcha {
public static void главная(String[] args) {
System.setProperty("webdriver.chrome.driver", "path_to_chromedriver");
WebDriver драйвер = новый ChromeDriver();
driver.get("https://www.example.com/captcha");
// Assume the CAPTCHA image is here and requires solving
// Send CAPTCHA image to a third-party CAPTCHA-solving service API
String captchaSolution = callCaptchaService(driver);
// Input solved CAPTCHA into the webpage
driver.findElement(By.id("captchaInput")).sendKeys(captchaSolution);
driver.findElement(By.id("submit")).click();
}
private static String callCaptchaService(WebDriver driver) {
// Example API call to a CAPTCHA-solving service
// Logic to send CAPTCHA image, receive solution, and return it
возврат "solvedCaptcha";
}
}

Подход 2: использование Undetected Chromedriver

Используйте undetected WebDriver, например Undetected ChromeDriver, позволяет обойти некоторые механизмы обнаружения, которые сайты используют для выявления Selenium.

Чтобы интегрировать его:

  • Скачайте undetected ChromeDriver.
  • Используйте его вместо WebDriver по умолчанию.

Пример:

System.setProperty("webdriver.chrome.driver", "path_to_undetected_chromedriver");
WebDriver драйвер = новый ChromeDriver();
// Continue with your usual automation steps

Этот метод работает, потому что некоторые CAPTCHA отслеживают поведение пользователя (движения мыши, скорость набора текста), а undetected WebDriver имитирует более естественные действия пользователя.

Подход 3: Предварительное решение CAPTCHA с помощью сбора cookies

Некоторые сайты позволяют решить CAPTCHA только один раз за сессию. Вы можете один раз вручную решить CAPTCHA, сохранить cookies сессии и повторно использовать их в последующих сессиях Selenium.

Вот как это сделать:

Set<Cookie> cookies = driver.manage().getCookies();
// Save cookies to a file
saveCookiesToFile(cookies);
// Later, load cookies back
для(Cookie cookie : loadCookiesFromFile()) {
driver.manage().addCookie(cookie);
}

В следующих сессиях вы можете обойти CAPTCHA, используя cookies из уже проверенной сессии.

Подход 4: Использование автоматизации браузера с человекоподобным взаимодействием

Некоторые CAPTCHA зависят от анализа действий пользователя. Такие инструменты, как Selenium Stealth помогают имитировать человеческое поведение, снижая вероятность срабатывания CAPTCHA.

Это предполагает имитацию:

  • Естественные движения мыши.
  • Случайные задержки между действиями.
  • Прокрутка и взаимодействие со страницей.

Заключение

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

Похожие записи