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

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

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

Как обойти MTCaptcha

Нарко Марко

Каратель в IT картеле

Введение

MTCaptcha — это современная система защиты от автоматизированных запросов, которая применяется на многих веб-ресурсах и в мобильных приложениях. В отличие от классических текстовых или графических капч, MTCaptcha работает на основе токенов: виджет анализирует поведение пользователя в реальном времени, и в случае успешной проверки возвращает криптографический токен mtcaptcha-verifiedtoken, который необходимо передать на сервер целевого сайта для подтверждения легитимности запроса.

В данном руководстве мы подробно разберём, как автоматизировать прохождение MTCaptcha через API, какие параметры требуются, как интегрировать решение в Python-скрипты и что делать, если стандартный токенный метод не подходит.


Как работает MTCaptcha

Характеристика Описание
Тип проверки Токеновая (JavaScript-виджет)
Визуальный элемент Текстовая капча, невидимая проверка или адаптивный вызов
Механизм защиты Сбор поведенческих сигналов, анализ футпринтов, proof-of-work, Threat SPECT
Результат проверки Генерация одноразового токена mtcaptcha-verifiedtoken
Срок жизни токена Минимум 50 секунд, обычно до 120 секунд

MTCaptcha предлагает несколько режимов работы:

  • Modern Mini — компактный виджет для форм
  • Invisible Captcha — полностью невидимая проверка для большинства пользователей
  • Adaptive Complexity — динамическое усложнение задачи при подозрении на бота

Обязательные параметры для отправки задачи

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

Базовые параметры (для всех типов)

Свойство Тип Обязательно Описание
type String Да Тип задачи: MtCaptchaTaskProxyless или MtCaptchaTask
websiteURL String Да Полный URL страницы, где отображается виджет капчи
websiteKey String Да Публичный ключ сайта (SiteKey), извлекается из исходного кода страницы

Параметры прокси (только для MtCaptchaTask)

Свойство Тип Обязательно Описание
proxyType String Да Протокол: http, https, или socks5
proxyAddress String Да IP-адрес или доменное имя прокси-сервера
proxyPort Integer Да Порт прокси-сервера
proxyLogin String Нет Логин для авторизации (если требуется)
proxyPassword String Нет Пароль для авторизации (если требуется)

Тип MtCaptchaTaskProxyless рекомендуется для сайтов без жёсткой привязки к IP. Тип MtCaptchaTask обязателен, если целевой ресурс валидирует совпадение IP между запросом к капче и отправкой формы.


Пошаговая инструкция: интеграция с API

Шаг 1. Извлечение websiteKey

  1. Откройте целевой сайт в браузере и нажмите F12 для открытия инструментов разработчика
  2. Перейдите во вкладку Elements (или Inspector)
  3. Найдите контейнер капчи. Обычно он выглядит так:
html Copy
<!-- MTCaptcha Anchor DOM -->
<div class="mtcaptcha" data-mtcaptcha-site-key="MTPublic-ExampleKey123"></div>

Или в конфигурации скрипта:

html Copy
<script>
var mtcaptchaConfig = {
  "sitekey": "MTPublic-ExampleKey123"
};
</script>
  1. Скопируйте значение sitekey. Это и есть ваш websiteKey .

Если ключ не находится в разметке, откройте вкладку Network, перезагрузите страницу и отфильтруйте запросы по слову mtcaptcha. Часто sitekey передаётся в параметрах инициализации скрипта.

Шаг 2. Создание задачи

Отправьте POST-запрос на эндпоинт создания задачи:
https://api.rucaptcha.com/createTask

Пример тела запроса (без прокси):

json Copy
{
  "clientKey": "ВАШ_API_КЛЮЧ",
  "task": {
    "type": "MtCaptchaTaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "MTPublic-ExampleKey123"
  }
}

Пример тела запроса (с прокси):

json Copy
{
  "clientKey": "ВАШ_API_КЛЮЧ",
  "task": {
    "type": "MtCaptchaTask",
    "websiteURL": "https://example.com/login",
    "websiteKey": "MTPublic-ExampleKey123",
    "proxyType": "http",
    "proxyAddress": "198.51.100.10",
    "proxyPort": 8080,
    "proxyLogin": "user",
    "proxyPassword": "secret"
  }
}

Шаг 3. Получение taskId

В случае успешного приёма задачи сервер вернёт:

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

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

Шаг 4. Опрос результата

Периодически отправляйте POST-запрос на:
https://api.rucaptcha.com/getTaskResult

Тело запроса:

json Copy
{
  "clientKey": "ВАШ_API_КЛЮЧ",
  "taskId": "a1b2c3d4e5f6g7h8i9j0"
}

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

json Copy
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "token": "v1(8f3a1c,7b2d9e,MTPublic-ExampleKey123,4a5b6c7d8e9f0...)"
  },
  "cost": "0.00299",
  "ip": "198.51.100.10",
  "createTime": 1714489200,
  "endTime": 1714489212
}

Шаг 5. Использование токена в целевом запросе

Полученный токен необходимо передать на сайт в скрытом поле формы mtcaptcha-verifiedtoken:

html Copy
<input type="hidden" name="mtcaptcha-verifiedtoken" value="v1(8f3a1c,7b2d9e,...)">

Или в теле POST-запроса:

javascript Copy
fetch("https://example.com/api/verify", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: `mtcaptcha-verifiedtoken=v1(8f3a1c,7b2d9e,...)&username=test&password=123`
});

Токен одноразовый и имеет короткий срок жизни (минимум 50 секунд). Отправляйте его в целевой запрос сразу после получения.


Примеры кода на Python

Вариант 1: Чистый Python (библиотека requests)

python Copy
import requests
import time

API_KEY = "ВАШ_API_КЛЮЧ"
CREATE_URL = "https://api.rucaptcha.com/createTask"
RESULT_URL = "https://api.rucaptcha.com/getTaskResult"

def solve_mtcaptcha(url: str, sitekey: str, proxy: dict = None) -> str:
    task = {
        "clientKey": API_KEY,
        "task": {
            "type": "MtCaptchaTaskProxyless" if not proxy else "MtCaptchaTask",
            "websiteURL": url,
            "websiteKey": sitekey
        }
    }
    
    if proxy:
        task["task"].update({
            "proxyType": proxy.get("type", "http"),
            "proxyAddress": proxy["address"],
            "proxyPort": proxy["port"],
            "proxyLogin": proxy.get("login"),
            "proxyPassword": proxy.get("password")
        })

    # Создание задачи
    resp = requests.post(CREATE_URL, json=task).json()
    if resp["errorId"] != 0:
        raise RuntimeError(f"Ошибка создания задачи: {resp}")
        
    task_id = resp["taskId"]
    
    # Ожидание решения
    for _ in range(24):  # до 120 секунд
        time.sleep(5)
        res = requests.post(RESULT_URL, json={
            "clientKey": API_KEY,
            "taskId": task_id
        }).json()
        
        if res["status"] == "ready":
            return res["solution"]["token"]
        if res["errorId"] != 0:
            raise RuntimeError(f"Ошибка решения: {res}")
            
    raise TimeoutError("Превышено время ожидания решения")

# Пример использования
token = solve_mtcaptcha(
    url="https://example.com/login",
    sitekey="MTPublic-ExampleKey123"
)
print(f"Готовый токен: {token}")

Вариант 2: Официальная Python-библиотека

Установка: pip install 2captcha-python

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('ВАШ_API_КЛЮЧ')

# Решение без прокси
result = solver.mtcaptcha(
    websiteURL='https://example.com/login',
    websiteKey='MTPublic-ExampleKey123'
)
print(f"Токен: {result['code']}")

# Решение с прокси
result = solver.mtcaptcha(
    websiteURL='https://example.com/login',
    websiteKey='MTPublic-ExampleKey123',
    proxyType='http',
    proxyAddress='198.51.100.10',
    proxyPort='8080',
    proxyLogin='user',
    proxyPassword='secret'
)
print(f"Токен: {result['code']}")

Исходный код библиотеки: GitHub

Альтернативный метод: если токен не работает

В некоторых конфигурациях целевой сайт может отклонять токен, полученный через стандартный API, или виджет может отображать нестандартный графический/текстовый вызов. Если у вас не получается решить капчу с помощью токенов, вы можете воспользоваться альтернативным методом решения: Простая капча

Когда использовать этот метод:

  • Сайт не принимает токен, полученный через API
  • MTCaptcha отображается как изображение с текстом
  • Требуется распознать текстовую капчу, встроенную в виджет

Как это работает:

  1. С помощью автоматизации браузера (Selenium, Playwright, Puppeteer) делается скриншот области с капчей
  2. Изображение кодируется в Base64
  3. Отправляется задача типа ImageToTextTask
  4. Полученный текст используется как ответ в соответствующее поле формы

Пример запроса:

json Copy
{
  "clientKey": "ВАШ_API_КЛЮЧ",
  "task": {
    "type": "ImageToTextTask",
    "body": "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAA...",
    "phrase": false,
    "case": false,
    "numeric": 0
  }
}

Пример на Python:

python Copy
import base64
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('ВАШ_API_КЛЮЧ')

# Из файла
result = solver.normal('screenshot.png')
print(f"Ответ: {result['code']}")

# Из Base64-строки
with open('screenshot.png', 'rb') as f:
    b64 = base64.b64encode(f.read()).decode()
result = solver.normal(b64)
print(f"Ответ: {result['code']}")

Этот подход полезен для нестандартных реализаций виджета, устаревших версий защиты или ситуаций, когда серверная валидация ожидает именно текстовый ввод.


Обработка ошибок и рекомендации

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

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

Практические советы по стабильности

Синхронизируйте контекст запроса
MTCaptcha может привязывать токен к User-Agent, заголовкам и IP. Отправляйте целевой запрос с теми же параметрами, с которыми создавалась задача.

Соблюдайте тайминги
Токен действителен минимум 50 секунд, обычно до 120 секунд. Не добавляйте задержки между получением решения и отправкой формы.

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

Реализуйте ретраи
Сетевые ошибки и временная нагрузка на сервис — норма. Добавляйте 2–3 повторные попытки с экспоненциальной задержкой.

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


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


Заключение

Автоматическое прохождение MTCaptcha сводится к корректному извлечению websiteKey, отправке задачи в API и быстрой подстановке полученного токена в поле mtcaptcha-verifiedtoken. Главный фактор успеха — соблюдение контекста: токен должен использоваться в тех же условиях, в которых он был сгенерирован.

Если стандартный токенный метод не проходит валидацию, переключитесь на распознавание изображения через метод ImageToTextTask. Это надёжный резервный вариант для сложных или нестандартных реализаций защиты.

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