Эта статья была полезной?
Как обойти Аудио капчу
Технический специалист
Введение
Аудио-капча часто используется на сайтах в качестве альтернативы визуальной защите или для обеспечения доступности. С точки зрения парсинга, это один из самых простых типов капч — распознавание полностью автоматизировано и выполняется нейронной сетью.
Рассмотрим, как правильно подготовить аудиофайл, настроить запросы в формате JSON по API v2 и избежать ошибок проверки, чтобы баланс не списывался напрасно.
Шаг 1. Подготовка файлов и параметров
Как найти и скачать аудиофайл капчи
Перед отправкой задачи на распознавание нужно получить аудиофайл с сайта. Есть три основных способа:
Способ 1: Через вкладку Network (рекомендуемый)
- Откройте DevTools, нажав F12 (или Cmd+Option+I на Mac).
- Перейдите на вкладку Network.
- Отфильтруйте запросы по типу Media или введите в фильтре mp3 или audio.
- Нажмите кнопку воспроизведения аудио на капче.
- В списке появится запрос к аудиофайлу — кликните по нему.
- Скопируйте URL из поля Request URL или кликните правой кнопкой мыши и выберите Open in new tab для скачивания.
Способ 2: Через Elements (Inspect Element)
- Нажмите правой кнопкой мыши на кнопку воспроизведения аудио капчи.
- Выберите Inspect (Просмотреть код).
- В DevTools найдите тег
<audio>с атрибутомsrc. - Скопируйте значение атрибута
src— это URL аудиофайла. - Для reCAPTCHA:
- Найдите iframe с капчей.
- Внутри iframe найдите элемент с id
audio-source. - Скопируйте значение атрибута
src.
Способ 3: Программно через Selenium
Если вы автоматизируете процесс, можно извлечь URL аудиофайла программно:
python
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
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
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AudioTask",
"body": "BASE64_ENCODED_MP3_AUDIO",
"lang": "en"
}
}
Ответ приходит сразу. Сохраните taskId для последующего опроса.
json
{
"errorId": 0,
"taskId": "123456789"
}
Получение результата
Опрашивайте сервер каждые 3–5 секунд. Нейросеть обычно решает аудио-капчу за 3–15 секунд, но в периоды высокой нагрузки время может увеличиться.
Эндпоинт: POST https://api.rucaptcha.com/getTaskResult
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "123456789"
}
Успешный ответ:
json
{
"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
<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
const audioInput = document.querySelector('input[name="captcha_code"]');
if (audioInput) {
audioInput.value = "РЕШЕНИЕ_ИЗ_API";
audioInput.closest('form').submit();
}
Если имя поля неизвестно, можно искать по типу и контексту:
javascript
const audioInput = document.querySelector('form input[type="text"]');
if (audioInput) {
audioInput.value = "РЕШЕНИЕ_ИЗ_API";
audioInput.form.submit();
}
Вариант 2: Прямая отправка формы через Python
Если вы парсите сайт через requests, можно отправить форму напрямую, минуя браузер.
python
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)
Как узнать точные параметры
- Откройте сайт с аудио-капчей в браузере.
- Нажмите F12, перейдите на вкладку Network.
- Вручную прослушайте аудио, введите любой текст и нажмите «Проверить».
- Найдите POST-запрос, который ушёл на сервер (обычно это /check-captcha, /verify или подобный).
- Во вкладке 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
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 — это процесс, при котором нейросеть автоматически распознаёт аудиозапись и возвращает текст. Это делает метод быстрым и надёжным даже при сложных аудиозаписях с шумами и акцентами.
Ключевые принципы стабильной работы:
-
Строгое соответствие формату: аудиофайл должен быть исключительно в формате MP3 и не превышать 1 МБ. Любое отклонение приведёт к ошибке валидации и списанию средств без результата.
-
Правильное указание языка: параметр lang обязателен. Если на сайте капча на русском, а вы передаёте en, нейросеть может неправильно распознать произношение, и точность снизится.
-
Обработка ошибок: предусмотрите в коде логику повторных попыток при получении ERROR_CAPTCHA_UNSOLVABLE. Просто обновите капчу на сайте и отправьте новый файл.
-
Оптимизация интервалов опроса: нейросеть решает задачу за 3–15 секунд, но не стоит опрашивать сервер чаще чем раз в 3 секунды, чтобы не превысить лимиты запросов API.
Аудио-капча остаётся одним из самых простых типов капч для программного обхода. При правильной подготовке файла и настройке запросов вы получите надёжный инструмент для обхода защиты.
Рекомендуемый порядок внедрения:
-
Настройте конвертацию аудио в Base64 и проверку размера файла.
-
Реализуйте базовую отправку задачи и опрос результата.
-
Добавьте подстановку текста в нужное поле на целевом сайте.
-
Внедрите обработку специфичных ошибок (неверный формат, UNSOLVABLE).
Такой подход обеспечит максимальную надёжность и минимальные затраты при работе с аудио-капчами.