Логотип «2Captcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как обойти капчу с помощью Ruby

Ник Макбейн
Ник Макбейн

Технический специалист

Введение

При автоматизации тестирования, парсинге данных или разработке ботов на Ruby разработчики часто сталкиваются с необходимостью обхода капчи. Написание собственных HTTP-запросов, реализация циклов опроса и обработка таймаутов усложняют код и отвлекают от основной бизнес-логики.

В этом руководстве мы рассмотрим, как использовать официальную библиотеку ruby-2captcha для интеграции с API 2Captcha. Мы разберем процесс установки, инициализации клиента, решения популярных типов капч и корректной обработки ошибок.

Установка и подключение

Библиотека совместима с Ruby версии 2.5 и выше, не имеет тяжелых внешних зависимостей и легко интегрируется в любые проекты, от простых скриптов до крупных приложений на Ruby on Rails.

Установить пакет можно через Bundler, добавив строку в ваш Gemfile:

ruby Copy
gem 'ruby-2captcha'

Затем выполните команду в терминале:

bash Copy
bundle install

Или установите библиотеку напрямую через RubyGems:

bash Copy
gem install ruby-2captcha

После установки подключите её в вашем коде:

ruby Copy
require 'api_2captcha'

Инициализация клиента

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

ruby Copy
api_key = ENV.fetch('CAPTCHA_API_KEY')
client = Api2Captcha.new(api_key)

Решение различных типов капч

Интерфейс библиотеки спроектирован так, что для каждого типа капчи предусмотрен отдельный метод. Метод автоматически отправляет задачу на сервер, ожидает её решения и возвращает готовый результат (текст или токен).

1. Текстовая или графическая капча (Normal)

Для решения обычных капч с изображениями используется метод normal. Изображение можно передать в виде пути к файлу или массива байтов.

ruby Copy
result = client.normal({
  image: File.read('/path/to/captcha.png')
})
puts "Распознанный текст: #{result}"

2. reCAPTCHA v2 и Invisible

Для обхода reCAPTCHA необходимо передать sitekey (параметр googlekey) и URL страницы (pageurl). Если используется невидимая версия капчи, добавьте параметр invisible: true.

ruby Copy
token = client.recaptcha_v2({
  googlekey: '6LeTxvsqAAAAAK...',
  pageurl: 'https://example.com/login',
  invisible: true
})
puts "g-recaptcha-response: #{token}"

3. Cloudflare Turnstile

Современная защита от Cloudflare требует передачи sitekey, URL страницы и, для повышения шансов на успешное прохождение, актуального User-Agent.

ruby Copy
token = client.turnstile({
  sitekey: '0x4AAAAAA...',
  pageurl: 'https://example.com/protected',
  useragent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36'
})
puts "cf-turnstile-response: #{token}"

4. Аудио-капча

Если на сайте используется аудио-капча, библиотека позволяет отправить аудиофайл (обычно в формате MP3) и получить распознанный текст.

ruby Copy
decoded_text = client.audio({
  audio: File.read('/path/to/challenge.mp3'),
  lang: 'ru' # Указываем язык, если он отличается от английского
})
puts "Ответ: #{decoded_text}"

Дополнительные настройки

Работа через прокси

Если целевой сайт строго проверяет IP-адреса и привязывает капчу к конкретному прокси, вы можете передать параметры прокси непосредственно в метод решения.

ruby Copy
token = client.recaptcha_v2({
  googlekey: '6LeTxvsqAAAAAK...',
  pageurl: 'https://example.com/login',
  proxytype: 'http',
  proxy: 'login:password@198.51.100.10:8080'
})

Настройка таймаутов

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

ruby Copy
client.default_timeout = 300      # Максимальное время ожидания (в секундах)
client.polling_interval = 15      # Интервал между запросами статуса (в секундах)

Асинхронный режим (Callback)

Если ваше приложение не должно блокироваться в ожидании ответа, можно настроить вебхук. Метод мгновенно вернет task_id, а результат решения будет отправлен POST-запросом на указанный вами URL.

ruby Copy
client.callback = 'https://your-app.com/captcha/webhook'

task_id = client.normal({ image: '/path/to/captcha.png' })
puts "Задача отправлена, ID: #{task_id}"

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

Библиотека предоставляет специализированные классы исключений, что позволяет четко разделять ошибки валидации, сетевые сбои и ответы от API.

ruby Copy
begin
  result = client.recaptcha_v2({
    googlekey: '6LeTxvsqAAAAAK...',
    pageurl: 'https://example.com/login'
  })
  puts "Капча успешно решена: #{result}"
rescue Api2Captcha::ValidationException => e
  puts "Некорректные параметры запроса: #{e.message}"
rescue Api2Captcha::NetworkException => e
  puts "Ошибка соединения с API: #{e.message}"
rescue Api2Captcha::TimeoutException => e
  puts "Превышено время ожидания решения"
rescue Api2Captcha::ApiException => e
  puts "Ошибка со стороны сервиса: #{e.message}"
end

Частые коды ошибок

При возникновении исключений библиотека транслирует коды ошибок API в понятные сообщения. Основные из них представлены в таблице:

Код ошибки Описание Рекомендация
ERROR_WRONG_USER_KEY Неверный формат или значение API-ключа Проверьте правильность ключа в переменных окружения
ERROR_ZERO_BALANCE Недостаточно средств на балансе Пополните счет в личном кабинете 2Captcha
ERROR_NO_SLOT_AVAILABLE Нет свободных воркеров Повторите попытку через 10–15 секунд
ERROR_BAD_PARAMETERS Не переданы обязательные параметры Проверьте соответствие параметров документации
ERROR_PROXY_CONNECT_REFUSED Не удалось подключиться к прокси Проверьте доступность и формат строки прокси
ERROR_CAPTCHA_UNSOLVABLE Капча не была решена Средства возвращаются, попробуйте обновить капчу

Отчеты о правильности решения

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

ruby Copy
# Если сайт принял токен и форма успешно отправилась
client.report_correct(task_id)

# Если сайт отклонил токен с ошибкой валидации
client.report_incorrect(task_id)

Заключение

Библиотека ruby-2captcha берет на себя всю рутинную работу по взаимодействию с API 2Captcha: она скрывает циклы опроса, валидирует входные параметры и возвращает готовые токены или распознанный текст. Благодаря чистому и идиоматичному синтаксису, она легко встраивается как в консольные утилиты, так и в веб-приложения на Ruby on Rails.

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

Полезные ссылки