Эта статья была полезной?
Как обойти reCAPTCHA v3 на Waze
Технический специалист
Введение
Waze — популярное приложение для навигации и отслеживания дорожной обстановки. Его интерактивная карта (Live Map) использует reCAPTCHA v3 для защиты API-эндпоинтов и предотвращения автоматизированных запросов. В отличие от предыдущих версий, reCAPTCHA v3 работает невидимо для пользователя и оценивает поведение на основе балла (score) от 0.0 до 1.0.
В этом руководстве мы разберем, как получить необходимые параметры, решить капчу через API 2Captcha и корректно интегрировать токен в ваш скрипт.
Параметры задачи
Для обхода reCAPTCHA v3 на Waze используется тип задачи RecaptchaV3TaskProxyless.
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV3TaskProxyless",
"websiteURL": "https://www.waze.com/ru/live-map",
"websiteKey": "6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW",
"pageAction": "api",
"minScore": 0.3,
"apiDomain": "www.recaptcha.net",
"isEnterprise": true
}
}
Как найти параметры
websiteURL
Это полный адрес страницы, на которой инициируется проверка. Для Waze это может быть главная страница карты (https://www.waze.com/live-map) или её локализованная версия (https://www.waze.com/ru/live-map).
websiteKey (SiteKey)
- Откройте страницу с картой и нажмите F12 (DevTools).
- Перейдите на вкладку Elements и нажмите Ctrl+F для поиска.
- Введите 6Lf4 или recaptcha и скопируйте значение атрибута data-sitekey.
- Альтернативно, на вкладке Network можно найти запрос к google.com/recaptcha или recaptcha.net и посмотреть параметр k.
pageAction
Этот параметр указывает, какое именно действие на сайте вызывает капчу.
- На вкладке Sources или в консоли DevTools найдите вызов grecaptcha.execute.
- Второй аргумент этого вызова обычно содержит объект с полем action. Для Waze при загрузке карты это часто значение api или live_map.
apiDomain
Посмотрите, с какого домена загружается скрипт капчи. Если в URL скрипта указан recaptcha.net (например, https://www.recaptcha.net/recaptcha/enterprise.js), передавайте www.recaptcha.net. Если используется стандартный домен Google, укажите www.google.com.
isEnterprise
Проверьте URL загружаемого скрипта. Если он содержит слово enterprise (например, recaptcha/enterprise.js), значит используется корпоративная версия, и этот параметр должен быть true.
Особенности reCAPTCHA v3 и специфика Waze
Решение reCAPTCHA v3 — сложная задача, так как она предъявляет строгие требования к значению score. Успех зависит от совокупности факторов: корректных параметров, цифровых отпечатков браузера и поведения сессии.
Однако, как показала практика, наши токены с высоким score успешно проходят капчу на этом сайте. Главное — использовать правильные параметры (особенно pageAction и apiDomain).
Почему minScore=0.3, а не 0.9
reCAPTCHA v3 возвращает score от 0.0 до 1.0, где:
- 0.9-1.0 — очень вероятно, что это человек
- 0.5-0.8 — возможно, человек
- 0.0-0.4 — очень вероятно, что это бот
Многие разработчики ошибочно устанавливают minScore=0.9, ожидая "идеальный" токен. Но это приводит к проблемам:
- Долгое ожидание — сервису сложнее получить токен с таким высоким score.
- Блокировки — если сайт ожидает score 0.7, а вы передаете токен с score 0.95, это может выглядеть подозрительно.
- Лишние расходы — сервис может не найти решение с таким высоким score и вернуть ошибку.
Для Waze оптимальный minScore=0.3, потому что:
- Сайт принимает токены с относительно низким score.
- Быстрее находится решение.
- Меньше вероятность блокировки из-за "слишком идеального" поведения.
Если сайт отклоняет токены с score 0.3, попробуйте увеличить до 0.5 или 0.7.
Как именно Waze ожидает токен
Waze использует reCAPTCHA v3 Enterprise для защиты своих API-эндпоинтов. Токен обычно передается в теле POST-запроса как параметр recaptcha_token или g-recaptcha-response.
Пример запроса к API Waze:
python
import requests
token = "YOUR_RECAPTCHA_TOKEN"
headers = {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
data = {
'recaptcha_token': token,
# другие параметры запроса
}
response = requests.post(
'https://www.waze.com/row-rtserver/web/TGeoSearch',
headers=headers,
json=data
)
print(response.json())
Если вы используете Playwright/Selenium, токен можно передать через перехват запросов (как показано в примере ниже) или через выполнение JavaScript:
python
await page.evaluate(f"""
window.recaptchaToken = '{token}';
""")
Примеры кода
Python + requests (Получение токена)
Если вам нужно просто получить токен для последующей отправки на бэкенд Waze через API:
python
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
from twocaptcha import TwoCaptcha
api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')
solver = TwoCaptcha(api_key)
try:
result = solver.recaptcha(
sitekey='6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW',
url='https://www.waze.com/ru/live-map',
version='v3',
action='api',
min_score=0.3,
domain='www.recaptcha.net',
enterprise=1
)
print(f"Токен успешно получен: {result['code']}")
except Exception as e:
print(f"Произошла ошибка: {e}")
Python + Playwright (Автоматизация браузера)
При автоматизации браузера токен reCAPTCHA v3 обычно передается напрямую в теле POST-запроса к API сайта или записывается в заголовок.
python
import asyncio
from playwright.async_api import async_playwright
from twocaptcha import TwoCaptcha
API_KEY = 'YOUR_API_KEY'
SITE_KEY = '6Lf4WdUqAAAAAEUYUvzyLYIkO3PoFAqi8ZHGiDLW'
PAGE_URL = 'https://www.waze.com/ru/live-map'
async def solve_captcha():
solver = TwoCaptcha(API_KEY)
try:
result = solver.recaptcha(
sitekey=SITE_KEY,
url=PAGE_URL,
version='v3',
action='api',
min_score=0.3,
domain='www.recaptcha.net',
is_enterprise=True
)
token = result['code']
print(f"Капча решена! Токен: {token}")
async with async_playwright() as p:
browser = await p.chromium.launch()
context = await browser.new_context()
page = await context.new_page()
await page.goto(PAGE_URL)
async def handle_route(route):
request = route.request
headers = request.headers
headers['g-recaptcha-response'] = token
await route.continue_(headers=headers)
await page.route('**/api/**', handle_route)
await page.reload()
await asyncio.sleep(5)
await browser.close()
except Exception as e:
print(f"Ошибка: {e}")
asyncio.run(solve_captcha())
Отчеты о правильности решения
Для reCAPTCHA v3 отправка отчетов критически важна. Если сайт отклонил токен, обязательно сообщите об этом через метод reportIncorrect. Это помогает сервису анализировать причины низкого score и возвращает вам средства. Если токен успешно прошел проверку, отправьте reportCorrect — это закрепляет положительную статистику и помогает поддерживать высокий уровень качества решений.
Отправить отчет можно через API:
python
import requests
API_KEY = "YOUR_API_KEY"
TASK_ID = "123456789"
# Отчет о неверном решении
requests.post(
"https://api.2captcha.com/reportIncorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
# Отчет о правильном решении
requests.post(
"https://api.2captcha.com/reportCorrect",
json={"clientKey": API_KEY, "taskId": TASK_ID}
)
Подробный гайд по отправке отчетов с примерами для разных языков: https://2captcha.com/h/how-to-submit-reports
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| ERROR_BAD_PARAMETERS | Неверно указаны pageAction, apiDomain или isEnterprise | Проверьте параметры в DevTools. Для Waze action часто равен api, а домен www.recaptcha.net |
| Токен получен, но сайт отклоняет запрос | Сайт ожидает другой механизм передачи токена или score слишком низкий | Убедитесь, что вы передаете токен в правильный заголовок или тело запроса. Проверьте правильность pageAction |
| ERROR_ZERO_BALANCE | Недостаточно средств на балансе | Пополните счет в личном кабинете 2Captcha |
| Iframe или запросы не найдены | Waze загружает карту динамически | Дождитесь полной загрузки страницы и появления сетевых запросов к API перед поиском параметров |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация по reCAPTCHA v3: https://2captcha.com/api-docs/recaptcha-v3
- Подробный гайд по отправке отчетов: https://2captcha.com/h/how-to-submit-reports
- Библиотека для Python: https://github.com/2captcha/2captcha-python