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

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

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

Ник Макбейн

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

Введение

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

Рассмотрим, как правильно подготовить аудиофайл, настроить запросы в формате 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).

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