Уведомление об использовании файлов cookie

Этот сайт использует cookie. Файлы cookie запоминают вас, поэтому мы можем предоставить вам персонализированные услуги. Подробнее.

Обход капчи на Ruby

Обход капчи на Ruby

Быстрое распознавание и обход различных капч с использованием Ruby. Используйте клиент Ruby и API сервиса решения капч для автоматического обхода reCAPTCHA, hCaptcha, Arkose captcha, Geetest и других капч.

Быстрый старт

Установка

Пакет скриптов можно установить с помощью установщика пакетов или вручную

Bundler

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

# Gemfile
gem 'ruby-2captcha'

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

Конфигурация

Описание всех необходимых параметров для конфигурирования установленного пакета

Экземпляр класса Api2Captcha можно создать вот так:

client = Api2Captcha.new('YOUR_API_KEY')

Также у вас есть возможность настраивать некоторые опции созданного экземпляра:

client = Api2Captcha.new("YOUR_API_KEY")
client.api_key = "YOUR_API_KEY"
Опции экземпляра Api2Captcha
ОпцияЗначение по умолчаниюОписание
soft_id-ваш id программного обеспечения, полученный после публикации в каталоге программ 2Captcha
callback-URL вашего веб-сервера, который получает результат распознавания капчи. URL должен быть сначала зарегистрирован в настройках pingback вашей учетной записи
default_timeout120Таймаут опроса в секундах для всех типов капчи, кроме reCAPTCHA. Определяет, как долго модуль пытается получить ответ от конечной точки API res.php
recaptcha_timeout600Таймаут опроса reCAPTCHA в секундах. Определяет, как долго модуль пытается получить ответ от конечной точки API res.php
polling_interval10Интервал в секундах между запросами к конечной точке API res.php, установка значений менее 5 секунд не рекомендуется
ВАЖНО: как только callback определен для одного экземпляра класса Api2Captcha, все остальные методы возвращают только ID капчи и НЕ опрашивают API для получения результата. Результат будет отправлен на callback URL. Чтобы получить ответ вручную, используйте метод getResult

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

Когда вы отправляете любую графическую капчу, вы можете передавать дополнительные параметры, которые помогут работникам 2Captcha решить ее быстро и правильно.

Опции капчи
ОпцияЗначение по умолчаниюОписание
numeric0определяет, содержит ли капча числовые или другие символы, подробнее см. в документации по API
min_len0минимальная длина ответа
max_len0максимальная длина ответа
phrase0определяет, содержит ли ответ несколько слов или нет
case_sensitive0определяет, чувствителен ли ответ к регистру
calc0определяет капчу, которая требует расчета
lang-определяет язык капчи, смотрите список поддерживаемых языков
hint_image-изображение с подсказкой, показанное работникам с помощью капчи
hint_text-подсказка или текст задачи, показываемый работникам с помощью капчи
simpleCaptcha

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

result = client.normal({ image: 'path/to/captcha.jpg'})
# OR
result = client.normal({
  image: 'https://site-with-captcha.com/path/to/captcha.jpg'
})
textCaptcha

Этот метод можно использовать для обхода капчи, которая требует ответа на вопрос в виде открытого текста

result = client.text({
  textcaptcha:'If tomorrow is Saturday, what day is today?',
  lang: "en"
})
recaptchaV2

Используйте этот метод для решения reCAPTCHA V2 и получения токена для обхода защиты

result = client.recaptcha_v2({
  googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
  pageurl: 'https://mysite.com/page/with/recaptcha_v2'
})
recaptchaV3

Этот метод позволяет обходить reCAPTCHA V3 и возвращает токен

result = client.recaptcha_v3({
  googlekey: '6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-',
  pageurl: 'https://mysite.com/page/with/recaptcha_v3',
  version: 'v3',
  score: 0.3,
  action: 'verify'
})
funCaptcha

Метод решения FunCaptcha (Аркоселабс). Возвращает токен для обхода капчи

result = client.funcaptcha({
  publickey: "69A21A01-CC7B-B9C6-0F9A-E7FA06677FFC",
  pageurl: "https://mysite.com/page/with/funcaptcha",
  surl: "https://client-api.arkoselabs.com"
})
geeTest

Метод решения капчи головоломки GeeTest. Возвращает набор токенов в формате JSON

result = client.geetest({
  gt: 'f1ab2cdefa3456789012345b6c78d90e',
  api_server: 'api-na.geetest.com',
  challenge: '12345678abc90123d45678ef90123a456b',
  pageurl: 'https://www.site.com/page/'
})
hCaptcha

Используйте этот метод для решения hCaptcha. Возвращает токен для обхода капчи

result = client.hcaptcha({
  sitekey: '10000000-ffff-ffff-ffff-000000000001',
  pageurl: 'https://www.site.com/page/'
})
keyCaptcha

Метод решения KeyCaptcha на основе токенов

result = client.keycaptcha({
  s_s_c_user_id: 10,
  s_s_c_session_id: '493e52c37c10c2bcdf4a00cbc9ccd1e8',
  s_s_c_web_server_sign: '9006dc725760858e4c0715b835472f22-pz-',
  s_s_c_web_server_sign2: '2ca3abe86d90c6142d5571db98af6714',
  pageurl: 'https://www.keycaptcha.ru/demo-magnetic/'
})
capy

Токен-основанный способ обхода капчи Capy puzzle

result = client.capy({
  sitekey: 'PUZZLE_Abc1dEFghIJKLM2no34P56q7rStu8v',
  pageurl: 'http://mysite.com/',
  api_server: 'https://jp.api.capy.me/'
})
grid

Этот метод изначально назывался Old reCAPTCHA V2. Его можно использовать для обхода любого типа капчи, когда вы можете применить сетку к изображению и вам нужно щелкнуть определенные поля сетки. Возвращает количество ячеек сетки

result = client.grid({
  image: 'path/to/captcha.jpg',
  rows: 3,
  cols: 3,
  previous_id: 0,
  lang: 'en',
  hint_image: 'path/to/hint.jpg',
  hint_text: 'Select all images with an Orange'
})
canvas

Метод Canvas можно использовать, когда вам нужно нарисовать линию вокруг объекта на изображении. Возвращает набор координат точек для рисования многоугольника.

result = client.canvas({
  image: 'path/to/captcha.jpg',
  previous_id: 0,
  lang: 'en',
  hint_image: 'path/to/hint.jpg',
  hint_text: 'Draw around apple'
})
clickCaptcha

Метод ClickCaptcha возвращает координаты точек на изображении капчи. Может использоваться, если вам нужно щелкнуть определенные точки на изображении.

result = client.coordinates({
  image: 'path/to/captcha.jpg',
  lang: 'en',
  hint_image: 'path/to/hint.jpg',
  hint_text: 'Connect the dots'
})
rotateCaptcha

Этот метод можно использовать для решения капчи, которая просит повернуть объект. В основном используется для обхода FunCaptcha. Возвращает значение угла поворота.

result = client.rotate({
  image: 'path/to/captcha.jpg',
  angle: 40,
  lang: 'en',
  hint_image: 'path/to/hint.jpg',
  hint_text: 'Put the images in the correct way'
})

Другие методы

Дополнительные допустимые методы применяемые в процессе работы основных скриптов

send / get_result

Этот метод можно использовать для ручной передачи капчи и получения ответов.

# example for normal captcha
captcha_id = client.send('path/to/captcha.jpg')

# or for another captcha, for example for lemin
captcha_id = client.send({
  method:"lemin",
  captcha_id: "CROPPED_3dfdd5c_d1872b526b794d83ba3b365eb15a200b",
  api_server: "api.leminnow.com",
  div_id: "lemin-cropped-captcha",
  pageurl: "https://www.site.com/page/"
})

time.sleep(20)

# Get result
result = client.get_result(captcha_id)

get_balance

Используйте этот метод, чтобы получить баланс своего аккаунта.

balance = client.get_balance

report

Используйте этот метод, чтобы сообщить о правильном или неправильном решении капчи.

client.report(captcha_id, True) # captcha solved correctly
client.report(captcha_id, False) # captcha solved incorrectly

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

Возможные варианты стандартных ошибок возвращаемые сервисом при обработке запросов

В случае ошибки решатель капчи выдает исключение. Важно правильно обращаться с этими случаями. Мы рекомендуем использовать begin/rescue для обработки исключений

begin
result = client.text('If tomorrow is Saturday, what day is today?')
rescue Api2Captcha::ValidationException => e
  # invalid parameters passed
  puts(e)
rescue Api2Captcha::NetworkException => e
  # network error occurred
  puts(e)
rescue Api2Captcha::ApiException => e
  # api respond with error
  puts(e)
rescue Api2Captcha::TimeoutException => e
  # captcha is not solved so far
  puts(e)
end

Другие языки для интеграции с API сервиса