Эта статья была полезной?
Как обойти reCAPTCHA v2 на сайте Monkeytype
Технический специалист
Сайт monkeytype.com — это популярная платформа для тренировки скорости печати, которая использует защиту reCAPTCHA v2 для защиты формы входа от автоматизированных запросов. Главная особенность обхода этой капчи заключается не только в получении токена, но и в его правильном внедрении.
Современные реализации reCAPTCHA v2 часто игнорируют токены, которые были просто помещены в скрытые поля формы. Вместо этого сайт ожидает вызова специальной JavaScript-функции (callback), которая сообщает виджету об успешной валидации. В этом руководстве мы разберем, как извлечь параметры, решить капчу через современный API v2, корректно передать токен через callback, а также рассмотрим альтернативные способы решения.
Параметры задачи (API v2)
Для отправки задачи через современный API v2 используется эндпоинт createTask. Тело запроса должно быть в формате JSON.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| clientKey | String | Да | Ваш API-ключ |
| type | String | Да | Тип задачи: RecaptchaV2TaskProxyless или RecaptchaV2Task |
| websiteURL | String | Да | Полный URL целевой веб-страницы, где загружается капча |
| websiteKey | String | Да | Ключ сайта reCAPTCHA. Можно найти в свойстве data-sitekey элемента div |
| isInvisible | Boolean | Нет | Указывает, является ли reCAPTCHA невидимой |
| recaptchaDataSValue | String | Нет | Значение атрибута data-s для reCAPTCHA (если есть) |
Как найти параметры
Параметры для reCAPTCHA v2 являются статическими и легко извлекаются из исходного кода страницы.
Способ 1: Через исходный код страницы (вкладка Elements)
- Откройте страницу входа https://monkeytype.com/login в браузере.
- Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Элементы (Elements).
- Нажмите Ctrl+F (или Cmd+F) и выполните поиск по фразе g-recaptcha или data-sitekey.
- Вы найдете div-элемент, похожий на этот:
- Значение атрибута data-sitekey является вашим websiteKey.
- Скопируйте полный URL из адресной строки браузера. Это будет ваш websiteURL.
Способ 2: Через сетевые запросы (вкладка Network)
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Сеть (Network).
- Включите сохранение логов (Preserve log) и обновите страницу.
- В фильтре введите recaptcha или api.js.
- Найдите запросы к серверам Google, например, к /recaptcha/api2/anchor.
- Нажмите на запрос и перейдите на вкладку Payload или Params.
- В параметрах URL найдите поле k. Его значение и есть ваш websiteKey.
Примеры кода
Python + requests (API v2)
Пример отправки задачи и опроса результата с использованием библиотеки requests через эндпоинты API v2.
python
import requests
import time
API_KEY = 'ВАШ_API_КЛЮЧ'
WEBSITE_URL = 'https://monkeytype.com/login'
WEBSITE_KEY = '6Lc-V8McAAAAAJ7s6LGNe7MBZnRiwbsbiWts87aj'
# 1. Создание задачи через API v2
url = 'https://2captcha.com/createTask'
headers = {
'Content-Type': 'application/json'
}
payload = {
"clientKey": API_KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": WEBSITE_URL,
"websiteKey": WEBSITE_KEY
}
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
if result.get('errorId') == 0:
task_id = result.get('taskId')
print(f"Задача создана, ID: {task_id}")
# 2. Получение результата через API v2
res_url = 'https://2captcha.com/getTaskResult'
while True:
time.sleep(5) # Пауза между запросами
res_payload = {
"clientKey": API_KEY,
"taskId": task_id
}
res_response = requests.post(res_url, headers=headers, json=res_payload).json()
if res_response.get('errorId') == 0 and res_response.get('status') == 'ready':
print("Капча успешно решена!")
token = res_response['solution']['gRecaptchaResponse']
print(f"Токен: {token}")
break
elif res_response.get('errorId') != 0:
print(f"Ошибка: {res_response.get('errorDescription')}")
break
else:
# Статус processing - задача еще не готова
continue
else:
print(f"Ошибка создания задачи: {result.get('errorDescription')}")
Python + Playwright
Пример автоматизации, который динамически извлекает sitekey, отправляет задачу через API v2 и внедряет токен через callback.
python
from playwright.sync_api import sync_playwright
import requests
import time
API_KEY = 'ВАШ_API_КЛЮЧ'
TARGET_URL = 'https://monkeytype.com/login'
def solve_monkeytype_recaptcha_v2():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
try:
page.goto(TARGET_URL)
# Ожидаем появления виджета reCAPTCHA
page.wait_for_selector('.g-recaptcha', timeout=10000)
# Извлекаем sitekey из атрибута data-sitekey
site_key = page.evaluate("""
() => {
const captchaDiv = document.querySelector('.g-recaptcha');
return captchaDiv ? captchaDiv.getAttribute('data-sitekey') : null;
}
""")
if not site_key:
raise Exception("Не удалось найти sitekey reCAPTCHA на странице.")
print(f"Найден sitekey: {site_key}")
# Отправка в API v2
api_url = 'https://2captcha.com/createTask'
headers = {'Content-Type': 'application/json'}
payload = {
"clientKey": API_KEY,
"task": {
"type": "RecaptchaV2TaskProxyless",
"websiteURL": page.url,
"websiteKey": site_key
}
}
task_response = requests.post(api_url, headers=headers, json=payload).json()
if task_response.get('errorId') != 0:
raise Exception(f"Ошибка создания задачи: {task_response.get('errorDescription')}")
task_id = task_response.get('taskId')
# Ожидание решения через getTaskResult
res_url = 'https://2captcha.com/getTaskResult'
token = None
for _ in range(20):
time.sleep(5)
res = requests.post(res_url, headers=headers, json={"clientKey": API_KEY, "taskId": task_id}).json()
if res.get('status') == 'ready':
token = res['solution']['gRecaptchaResponse']
break
if res.get('errorId') != 0:
print(f"Ошибка API: {res.get('errorDescription')}")
break
if token:
print(f"Токен получен: {token}")
# Внедрение токена через callback
page.evaluate(f"""
// 1. Попытка найти и вызвать именованный callback (замените 'yourCallbackName' на реальный, если он есть в data-callback)
if (typeof yourCallbackName === 'function') {{
yourCallbackName("{token}");
}}
// 2. Альтернативный универсальный способ внедрения через внутреннюю структуру grecaptcha
const textarea = document.querySelector('textarea[name="g-recaptcha-response"]');
if (textarea) {{
textarea.value = "{token}";
textarea.dispatchEvent(new Event('change', {{ bubbles: true }}));
}}
console.log("Token injection attempted");
""")
print("Токен передан через callback/DOM.")
else:
print("Не удалось получить токен.")
except Exception as e:
print(f"Ошибка: {e}")
finally:
# browser.close()
if __name__ == '__main__':
solve_monkeytype_recaptcha_v2()
Как использовать полученный токен (Передача через callback)
Сайт {{sitename}}, как и многие другие современные сайты с reCAPTCHA v2, может игнорировать токен, если он просто помещен в скрытое поле. Сайт ожидает, что виджет сам сообщит об успешной валидации через вызов функции callback.
Чтобы реализовать это правильно:
- Изучите исходный код страницы (вкладка Elements). Найдите div с классом g-recaptcha.
- Проверьте, есть ли у него атрибут data-callback="имя_функции". Если есть, просто вызовите эту функцию через page.evaluate, передав ей токен: имя_функции("ВАШ_ТОКЕН").
- Если атрибута data-callback нет, используйте универсальный метод внедрения через внутреннюю структуру ___grecaptcha_cfg, который подробно описан в нашей специализированной статье: Как передать токен reCAPTCHA v2 через callback (https://2captcha.com/h/recaptcha-v2-callback).
Альтернативные способы решения
Помимо прямого API, существуют два дополнительных способа обхода reCAPTCHA v2 на {{sitename}}, которые могут быть полезны в различных сценариях.
1. Расширение для браузера (Captcha Bypass Extension)
Если вы работаете вручную или используете автоматизацию на базе Selenium/Playwright с реальным браузером, вы можете установить наше специальное расширение для обхода капч.
Преимущества:
- Не требует написания кода для перехвата параметров и отправки запросов
- Автоматически определяет появление капчи и решает её в фоновом режиме
- Работает с большинством популярных типов капч, включая reCAPTCHA v2
- Идеально подходит для ручного серфинга или сложных сценариев автоматизации
Подробнее о расширении: https://2captcha.com/captcha-bypass-extension
2. Browser API (Scraper)
Для сложных задач парсинга, где нужно не только обойти капчу, но и извлечь данные со страницы после успешной авторизации, мы предлагаем Browser API — облачное решение на базе headless-браузеров.
Преимущества:
- Полностью управляемый облачный браузер с встроенной поддержкой обхода капч
- Не нужно настраивать прокси, User-Agent или бороться с блокировками
- Встроенные функции для извлечения данных (скриншоты, HTML, выполнение JavaScript)
- Автоматическое решение капч при навигации по сайту
- Идеально для массового парсинга и сбора данных
Подробнее о Browser API: https://2captcha.com/scraper/browser-api/dashboard
Частые ошибки и решения (API v2)
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| ERROR_KEY_DOES_NOT_EXIST | Неверный или пустой API-ключ. | Проверьте правильность копирования ключа из панели управления. |
| ERROR_ZERO_BALANCE | Недостаточно средств на балансе аккаунта. | Пополните баланс аккаунта. |
| ERROR_INVALID_PARAMETERS | Отсутствуют обязательные параметры (например, websiteKey или websiteURL) или неверный формат JSON. | Убедитесь, что объект task содержит все необходимые поля в правильном формате, как указано в документации API v2. |
| ERROR_GOOGLEKEY | Неверный формат websiteKey или несоответствие домена ключа и URL. | Убедитесь, что ключ начинается с 6L, скопирован без лишних пробелов, а websiteURL точно соответствует домену, для которого зарегистрирован ключ. |
| ERROR_CAPTCHA_UNSOLVABLE | Капча не может быть решена (истекло время). | Убедитесь, что вы не ждете слишком долго перед отправкой задачи, и что websiteURL актуален. |
| Токен не принимается формой | Неверный способ внедрения токена (сайт ждет callback). | Не полагайтесь только на скрытые поля. Найдите функцию callback в исходном коде или используйте метод из статьи про callback. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация API по reCAPTCHA v2: https://2captcha.com/api-docs/recaptcha-v2
- Статья: Как передать токен reCAPTCHA v2 через callback: https://2captcha.com/h/recaptcha-v2-callback
- Расширение для обхода капч: https://2captcha.com/captcha-bypass-extension
- Browser API для парсинга: https://2captcha.com/scraper/browser-api/dashboard
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://2captcha.com/h?category=sites