Туториалы по обходу капчи

Как обойти капчу на Java

Как автоматически решить и обойти капчу на Java: Пример кода

Автоматизация обхода капч — сложная, но решаемая задача. При использовании сервисов распознавания процесс можно значительно упростить и провести автоматизацию .

В статье разобраны методы обхода и приведеы примеры кода, готовые решения для языка программирования Java.

Причины для обхода капч

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

  1. Доступность: Капчи создают барьеры для пользователей с ограниченными возможностями, затрудняя доступ к информации.
  2. Автоматизация: Парсинг и автоматическое тестирование требуют минимального взаимодействия с интерфейсом, а капчи блокируют ботов.

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

Как обойти капчи на Java

В статье разобраны примеры кода, как обойти капчи с использованием Java и библиотек сторонних сервисов по распозначанию.

Решение обеспечивает API по распознаванию капч для решения reCAPTCHA, Arkose, Cloudflare и других типов, и использование пакета Java.

Можно использовать более дешевый сервис - SolveCaptcha (API для решения капч), решение универсально и дает возможность использовать любой сервис.

Установка

Пакет 2Captcha можно установить через менеджер пакетов или вручную.

Библиотека 2captcha-java доступна в Maven Central для удобной интеграции.

Дополнительную информацию можно найти в репозитории на GitHub, где представлены библиотеки и модули для упрощения работы с API решения капч.

Настройка

После установки пакета 2Captcha можно настроить его параметры для оптимизации работы в соответствии с вашими требованиями. Ниже приведено подробное описание всех доступных параметров конфигурации.

Инициализация экземпляра

Для начала работы создайте экземпляр класса TwoCaptcha, указав API-ключ:

TwoCaptcha solver = new TwoCaptcha("ВАШ_API_КЛЮЧ");

Вы также можете настроить дополнительные параметры для управления поведением solver'а:

solver.setSoftId(123);  // ID программного обеспечения в каталоге 2Captcha  
solver.setCallback("https://your.site/result-receiver");  // URL для получения результата  
solver.setDefaultTimeout(120);  // Таймаут ожидания (кроме reCAPTCHA)  
solver.setRecaptchaTimeout(600);  // Таймаут ожидания для reCAPTCHA  
solver.setPollingInterval(10); // Не рекомендуется устанавливать значение ниже 5 секунд, так как это может привести к блокировке API из-за слишком частых запросов.  // Интервал запросов к API  

Параметры конфигурации

Параметр Значение по умолчанию Описание
softId - ID программного обеспечения после публикации в каталоге 2Captcha.
callback - URL для получения результата. Должен быть зарегистрирован в настройках pingback вашей учетной записи.
defaultTimeout 120 Таймаут ожидания в секундах для всех капч, кроме reCAPTCHA. Определяет, как долго solver будет запрашивать ответ с res.php API.
recaptchaTimeout 600 Таймаут ожидания (в секундах) для reCAPTCHA.
pollingInterval 10 Интервал между запросами к API res.php. Не рекомендуется ставить значение меньше 5 секунд.

Важные замечания

  • Если указан callback URL, то TwoCaptcha не будет запрашивать результат решения. Вместо этого возвращается ID капчи, а результат отправляется на callback URL.
  • Для ручного получения ответа используйте метод getResult() после отправки капчи.

Решение капчи

При отправке изображений капчи можно передавать дополнительные параметры, чтобы помочь работникам 2Captcha решить ее быстрее.

Доступные параметры

Параметр Значение по умолчанию Описание
numeric 0 Определяет, содержит ли капча только цифры (см. документацию API).
minLength 0 Минимальная длина ответа.
maxLength 0 Максимальная длина ответа.
phrase 0 Определяет, состоит ли ответ из нескольких слов.
caseSensitive 0 Определяет, чувствителен ли ответ к регистру.
calc 0 Указывает, требуется ли вычисление.
lang - Определяет язык капчи.
hintImg - Изображение с подсказкой для работников.
hintText - Текстовая подсказка или задание для работников.

Пример решения обычной капчи

Normal captcha = new Normal();
captcha.setFile("path/to/captcha.jpg");
captcha.setMinLen(4);
captcha.setMaxLen(20);
captcha.setCaseSensitive(true);
captcha.setLang("en");

try {
    solver.solve(captcha);
    System.out.println("Капча решена: " + captcha.getCode());
} catch (Exception e) {
    System.out.println("Ошибка: " + e.getMessage());
}

Решение reCAPTCHA v2

ReCaptcha captcha = new ReCaptcha();
captcha.setSiteKey("6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-");
captcha.setUrl("https://mysite.com/page/with/recaptcha");
captcha.setInvisible(true);
captcha.setAction("verify");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Решение FunCaptcha (Arkose Labs)

FunCaptcha captcha = new FunCaptcha();
captcha.setSiteKey("69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC");
captcha.setUrl("https://mysite.com/page/with/funcaptcha");
captcha.setSUrl("https://client-api.arkoselabs.com");
captcha.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Решение GeeTest

GeeTest captcha = new GeeTest();
captcha.setGt("f2ae6cadcf7886856696502e1d55e00c");
captcha.setChallenge("12345678abc90123d45678ef90123a456b");
captcha.setUrl("https://mysite.com/captcha.html");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Решение KeyCaptcha

KeyCaptcha captcha = new KeyCaptcha();
captcha.setUserId(10);
captcha.setSessionId("493e52c37c10c2bcdf4a00cbc9ccd1e8");
captcha.setWebServerSign("9006dc725760858e4c0715b835472f22");
captcha.setWebServerSign2("2ca3abe86d90c6142d5571db98af6714");
captcha.setUrl("https://www.keycaptcha.ru/demo-magnetic/");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Решение Capy

Capy captcha = new Capy();
captcha.setSiteKey("PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v");
captcha.setUrl("https://www.mysite.com/captcha/");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");
ReCaptcha captcha = new ReCaptcha();
captcha.setSiteKey("6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-");
captcha.setUrl("https://mysite.com/page/with/recaptcha");
captcha.setInvisible(true);
captcha.setAction("verify");
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Решение reCAPTCHA v3

ReCaptcha captcha = new ReCaptcha();
captcha.setSiteKey("6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-");
captcha.setUrl("https://mysite.com/page/with/recaptcha");
captcha.setVersion("v3");
captcha.setAction("verify");
captcha.setScore(0.3);
captcha.setProxy("HTTPS", "login:password@IP_address:PORT");

Другое

Проверка баланса аккаунта

Для проверки баланса учетной записи 2Captcha используйте метод balance():

// Получить текущий баланс
double balance = solver.balance();

Отправка и получение результата вручную

Методы send и getResult позволяют вручную отправлять капчу на решение и получать результат:

// Отправка капчи
String captchaId = solver.send(captcha);

// Ожидание перед запросом результата
Thread.sleep(20 * 1000); // Время ожидания может зависеть от сложности капчи. В некоторых случаях может понадобиться больше времени.

// Получение результата
String code = solver.getResult(captchaId);

Сообщение о правильности решения

Если капча была решена неверно, можно отправить жалобу через API:

// Отправить подтверждение, что капча решена правильно
solver.report(captcha.getId(), true);

// Отправить жалобу на неправильное решение
solver.report(captcha.getId(), false); // Если капча была решена неправильно, отправляется жалоба. Если жалоба подтверждена, средства за её решение возвращаются на баланс.

Обработка ошибок

Чтобы корректно обрабатывать ошибки, используйте try/catch.

Пример

try {
    solver.solve(captcha);
} catch (ValidationException e) {
    System.out.println("Ошибка валидации: " + e.getMessage());
} catch (NetworkException e) {
    System.out.println("Ошибка сети: " + e.getMessage());
} catch (ApiException e) {
    System.out.println("Ошибка API: " + e.getMessage());
} catch (TimeoutException e) {
    // Таймаут решения капчи. Попробуйте повторно отправить запрос или использовать альтернативный сервис решения капч.
    // Также можно увеличить значение timeout для сложных капч. {
    System.out.println("Таймаут решения капчи: " + e.getMessage());
} catch (Exception e) {
    System.out.println("Произошла непредвиденная ошибка: " + e.getMessage());
}