Looking for international version of our service? Go to 2captcha.com

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

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

Как обойти Аудио капчу

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

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

Введение

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

Рассмотрим, как правильно подготовить аудиофайл, настроить запросы в формате JSON по API v2 и избежать ошибок проверки, чтобы баланс не списывался напрасно.

Шаг 1. Подготовка файлов и параметров

Как найти и скачать аудиофайл капчи

Перед отправкой задачи на распознавание нужно получить аудиофайл с сайта. Есть три основных способа:

Способ 1: Через вкладку Network (рекомендуемый)

  1. Откройте DevTools, нажав F12 (или Cmd+Option+I на Mac).
  2. Перейдите на вкладку Network.
  3. Отфильтруйте запросы по типу Media или введите в фильтре mp3 или audio.
  4. Нажмите кнопку воспроизведения аудио на капче.
  5. В списке появится запрос к аудиофайлу — кликните по нему.
  6. Скопируйте URL из поля Request URL или кликните правой кнопкой мыши и выберите Open in new tab для скачивания.

Способ 2: Через Elements (Inspect Element)

  1. Нажмите правой кнопкой мыши на кнопку воспроизведения аудио капчи.
  2. Выберите Inspect (Просмотреть код).
  3. В DevTools найдите тег <audio> с атрибутом src.
  4. Скопируйте значение атрибута src — это URL аудиофайла.
  5. Для reCAPTCHA:
    • Найдите iframe с капчей.
    • Внутри iframe найдите элемент с id audio-source.
    • Скопируйте значение атрибута src.

Способ 3: Программно через Selenium

Если вы автоматизируете процесс, можно извлечь URL аудиофайла программно:

python Copy
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import urllib.request
import time

driver = webdriver.Chrome()
driver.get("https://example.com")

# Находим и кликаем на чекбокс reCAPTCHA
WebDriverWait(driver, 10).until(
    EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[title='reCAPTCHA']"))
)
driver.find_element(By.CSS_SELECTOR, "span#recaptcha-anchor").click()
time.sleep(1)

# Возвращаемся к основному документу и переключаемся на iframe с challenge
driver.switch_to.default_content()
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    if "recaptcha" in iframe.get_attribute("src"):
        driver.switch_to.frame(iframe)
        break

# Нажимаем кнопку аудио
audio_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "button#recaptcha-audio-button"))
)
audio_button.click()
time.sleep(2)

# Получаем URL аудиофайла
audio_element = driver.find_element(By.ID, "audio-source")
audio_src = audio_element.get_attribute("src")
print(f"Audio URL: {audio_src}")

# Скачиваем файл
urllib.request.urlretrieve(audio_src, "captcha.mp3")

После скачивания файла переходите к параметрам задачи. Для решения аудио-капчи требуется всего два ключевых параметра:

  • body: сам аудиофайл в кодировке Base64. Должен быть строго в формате MP3 и весить не более 1 МБ.
  • lang: язык аудиозаписи. Поддерживаются коды: en (английский), fr (французский), de (немецкий), el (греческий), pt (португальский), ru (русский). Если не указано, по умолчанию используется en.

Шаг 2. Требования к аудиофайлу

Самая частая причина ошибок при работе с аудио-капчей — неправильный формат или размер файла. Нейросеть просто не сможет его обработать.

Правила подготовки:

  • Формат должен быть строго MP3. Если у вас файлы в формате WAV, OGG или другом, обязательно конвертируйте их (например, с помощью ffmpeg или онлайн-конвертеров).
  • Размер должен быть не более 1 МБ. Если файл тяжелее — обрежьте его или понизьте битрейт.
  • Файл нужно закодировать в Base64. Строка должна быть чистой, без BOM и лишних переносов строк.

Пример кодирования в Python:

python Copy
import base64

with open("audio.mp3", "rb") as file:
    audio_base64 = base64.b64encode(file.read()).decode("utf-8")

Шаг 3. Отправка задачи (API v2)

Показываем на примере JSON. Он возвращает структурированные ошибки и поддерживает все необходимые параметры.

Создание задачи

Эндпоинт: POST https://api.rucaptcha.com/createTask

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "AudioTask",
        "body": "BASE64_ENCODED_MP3_AUDIO",
        "lang": "en"
    }
}

Ответ приходит сразу. Сохраните taskId для последующего опроса.

json Copy
{
    "errorId": 0,
    "taskId": "123456789"
}

Получение результата

Опрашивайте сервер каждые 3–5 секунд. Нейросеть обычно решает аудио-капчу за 3–15 секунд, но в периоды высокой нагрузки время может увеличиться.

Эндпоинт: POST https://api.rucaptcha.com/getTaskResult

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "123456789"
}

Успешный ответ:

json Copy
{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "text": "hello world"
    },
    "cost": "0.0005",
    "ip": "1.2.3.4",
    "createTime": 1692808229,
    "endTime": 1692808326,
    "solveCount": 0
}

Шаг 4. Отправка результата на сайт

Аудио-капча обычно реализована как простая форма: кнопка воспроизведения аудио, текстовое поле для ввода и кнопка отправки. В отличие от сложных капч (reCAPTCHA, Funcaptcha), здесь не нужно передавать токены — достаточно подставить распознанный текст в поле и отправить форму.

Поиск поля ввода

Откройте DevTools (F12) и найдите input, в который пользователь вручную вводит текст. Обычно это стандартное текстовое поле с именем вроде captcha, code, audio_code или captcha_response.

Пример типичной разметки:

html Copy
<form action="/check-captcha" method="POST">
    <audio src="/captcha/audio/abc123.mp3"></audio>
    <input type="text" name="captcha_code" placeholder="Введите текст">
    <button type="submit">Проверить</button>
</form>

Вариант 1: Подстановка через JavaScript

Найдите input и подставьте в него распознанный текст, затем отправьте форму.

javascript Copy
const audioInput = document.querySelector('input[name="captcha_code"]');
if (audioInput) {
    audioInput.value = "РЕШЕНИЕ_ИЗ_API";
    audioInput.closest('form').submit();
}

Если имя поля неизвестно, можно искать по типу и контексту:

javascript Copy
const audioInput = document.querySelector('form input[type="text"]');
if (audioInput) {
    audioInput.value = "РЕШЕНИЕ_ИЗ_API";
    audioInput.form.submit();
}

Вариант 2: Прямая отправка формы через Python

Если вы парсите сайт через requests, можно отправить форму напрямую, минуя браузер.

python Copy
import requests

session = requests.Session()
# Сначала загрузите страницу, чтобы получить cookies и CSRF-токен (если есть)
session.get("https://target-site.com/page-with-captcha")

# Отправьте решение
payload = {
    "captcha_code": "РЕШЕНИЕ_ИЗ_API"
}

response = session.post("https://target-site.com/check-captcha", data=payload)
print(response.status_code)

Как узнать точные параметры

  1. Откройте сайт с аудио-капчей в браузере.
  2. Нажмите F12, перейдите на вкладку Network.
  3. Вручную прослушайте аудио, введите любой текст и нажмите «Проверить».
  4. Найдите POST-запрос, который ушёл на сервер (обычно это /check-captcha, /verify или подобный).
  5. Во вкладке Payload (или Form Data) посмотрите, какие поля отправляются. Скопируйте имя поля для капчи и URL эндпоинта.

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

Шаг 5. Возможные ошибки и их решение

  • ERROR_WRONG_USER_KEY или ERROR_KEY_DOES_NOT_EXIST
    Причина: Неверный ключ API.
    Решение: Проверьте ключ в личном кабинете RuCaptcha. Убедитесь, что используете ключ от аккаунта rucaptcha.com.

  • ERROR_ZERO_BALANCE
    Причина: Недостаточно средств на счете.
    Решение: Пополните баланс. Аудио-капча стоит очень дёшево, но при массовых запросах расход быстро возрастает.

  • ERROR_CAPTCHA_UNSOLVABLE
    Причина: Нейросеть не смогла распознать текст. Обычно из-за сильных шумов, наложения голосов, искажений или нестандартного акцента.
    Решение: Обновите капчу на сайте, чтобы получить новый, более чистый аудиофайл. Если ошибка возникает массово, проверьте правильность параметра lang.

  • ERROR_MALFORMED_REQUEST или другие ошибки валидации
    Причина: Неверный формат запроса или самого файла.
    Решение: Убедитесь, что файл строго в формате MP3, его размер не превышает 1 МБ, а поле body — корректная строка в Base64 без лишних пробелов. Параметр lang должен содержать только поддерживаемые коды: en, fr, de, el, pt, ru.

Чек-лист

  • Файл строго в формате MP3
  • Размер файла не превышает 1 МБ
  • Файл корректно закодирован в Base64
  • Параметр lang указан верно и соответствует языку на сайте
  • Ключ API актуален, баланс пополнен
  • Обработаны ошибки валидации и UNSOLVABLE
  • Интервал опроса getTaskResult — не менее 3 секунд

Код

Готовые примеры реализации для популярных языков программирования доступны в официальном репозитории:
https://github.com/2captcha

Документация API:
https://rucaptcha.com/api-docs

Базовый пример на Python:

python Copy
import requests
import time
import base64

API_KEY = "YOUR_API_KEY"
CREATE_TASK_URL = "https://api.rucaptcha.com/createTask"
GET_RESULT_URL = "https://api.rucaptcha.com/getTaskResult"

def solve_audio_captcha(audio_file_path, lang="en"):
    # Читаем и кодируем файл
    with open(audio_file_path, "rb") as file:
        audio_base64 = base64.b64encode(file.read()).decode("utf-8")

    # Создаём задачу
    create_payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "AudioTask",
            "body": audio_base64,
            "lang": lang
        }
    }

    response = requests.post(CREATE_TASK_URL, json=create_payload)
    result = response.json()

    if result.get("errorId") != 0:
        raise Exception(f"Ошибка создания задачи: {result}")

    task_id = result["taskId"]

    # Опрашиваем результат
    while True:
        time.sleep(5)
        result_payload = {
            "clientKey": API_KEY,
            "taskId": task_id
        }
        response = requests.post(GET_RESULT_URL, json=result_payload)
        result = response.json()

        if result.get("status") == "ready":
            return result["solution"]["text"]
        elif result.get("errorId") != 0:
            raise Exception(f"Ошибка решения: {result}")

# Использование
text = solve_audio_captcha("audio.mp3", lang="en")
print(f"Распознанный текст: {text}")

Заключение

Обход аудио-капчи через API RuCaptcha — это процесс, при котором нейросеть автоматически распознаёт аудиозапись и возвращает текст. Это делает метод быстрым и надёжным даже при сложных аудиозаписях с шумами и акцентами.

Ключевые принципы стабильной работы:

  1. Строгое соответствие формату: аудиофайл должен быть исключительно в формате MP3 и не превышать 1 МБ. Любое отклонение приведёт к ошибке валидации и списанию средств без результата.

  2. Правильное указание языка: параметр lang обязателен. Если на сайте капча на русском, а вы передаёте en, нейросеть может неправильно распознать произношение, и точность снизится.

  3. Обработка ошибок: предусмотрите в коде логику повторных попыток при получении ERROR_CAPTCHA_UNSOLVABLE. Просто обновите капчу на сайте и отправьте новый файл.

  4. Оптимизация интервалов опроса: нейросеть решает задачу за 3–15 секунд, но не стоит опрашивать сервер чаще чем раз в 3 секунды, чтобы не превысить лимиты запросов API.

Аудио-капча остаётся одним из самых простых типов капч для программного обхода. При правильной подготовке файла и настройке запросов вы получите надёжный инструмент для обхода защиты.

Рекомендуемый порядок внедрения:

  1. Настройте конвертацию аудио в Base64 и проверку размера файла.

  2. Реализуйте базовую отправку задачи и опрос результата.

  3. Добавьте подстановку текста в нужное поле на целевом сайте.

  4. Внедрите обработку специфичных ошибок (неверный формат, UNSOLVABLE).

Такой подход обеспечит максимальную надёжность и минимальные затраты при работе с аудио-капчами.