Типы задач
reCAPTCHA v2
Эта страница переведена с китайской версии машинным переводом и может содержать ошибки. Приоритет имеет китайская версия.
Задача reCAPTCHA v2 возвращает токен (gRecaptchaResponse), который нужно отправить на целевой сайт, чтобы пройти проверку, без выбора картинок. Самый популярный тип NoCaptchaTaskProxyless стоит 15 pts (≈ $2.25 / 1k) за задачу и работает асинхронно: создайте задачу через createTask, затем вызывайте getTaskResult каждые 5 секунд, пока не получите результат. При неудаче или тайм-ауте баллы возвращаются автоматически.
https://api.yescaptcha.com/createTaskГлобальный endpointhttps://cn.yescaptcha.com/createTaskEndpoint для КитаяТело запроса — JSON, авторизация по clientKey (скопируйте его в панели на yescaptcha.com). Результат нужно запрашивать на том же endpoint, где создана задача.
Когда использовать
Заголовок раздела «Когда использовать»- На странице есть флажок «Я не робот» (I’m not a robot): обычная версия.
- Флажка нет, а задание с картинками появляется только после нажатия кнопки отправки: невидимая версия, добавьте
"isInvisible": true. - Страница загружает
recaptcha/enterprise.jsили в адресах запросов естьenterprise: Enterprise-версия, используйте типы со словомEnterpriseв названии.
Если не уверены, какая версия у вас, см. Как определить тип капчи. Если токены проходят недостаточно часто, попробуйте распознавание изображений reCAPTCHA v2: API сообщает, по каким картинкам нужно кликнуть, а клики вы выполняете в браузере сами.
Типы задач и цены
Заголовок раздела «Типы задач и цены»| Тип задачи | Цена | Режим | Примечания |
|---|---|---|---|
NoCaptchaTaskProxyless | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | |
RecaptchaV2TaskProxyless | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | Те же параметры, что у NoCaptchaTaskProxyless, но другой маршрут; можно использовать любой из них как резервный |
NoCaptchaTask | $2.25 / 1k; 15 pts/задача · ¥15 / 1k | Асинхронный | Свой прокси |
RecaptchaV2EnterpriseTaskProxyless | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | |
RecaptchaV2EnterpriseTask | $3.00 / 1k; 20 pts/задача · ¥20 / 1k | Асинхронный | Свой прокси |
Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах.
NoCaptchaTaskProxylessиRecaptchaV2TaskProxylessпринимают одинаковые параметры, но работают по разным маршрутам. Если один проходит недостаточно часто, попробуйте другой.- Типы без
Proxylessв названии (NoCaptchaTask,RecaptchaV2EnterpriseTask) загружают капчу через ваш прокси и требуют поляproxyType,proxyAddress,proxyPortи другие. Используйте их, если целевой сайт проверяет IP посетителя.
Параметры запроса
Заголовок раздела «Параметры запроса»Поля объекта task в createTask:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
type | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице |
websiteURL | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи |
websiteKey | string | Да | Ключ сайта (sitekey), его можно найти в исходном коде страницы или в сетевых запросах; обычно не меняется |
isInvisible | boolean | Нет | Передайте true для невидимого варианта; в остальных случаях не передавайте |
proxyType | string | Некоторые типы | Протокол прокси: http, https, socks4 или socks5 (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyAddress | string | Некоторые типы | IP-адрес или имя хоста прокси. Локальные или частные адреса, например 127.0.0.1 или 192.168.x.x, не подойдут, так как наши серверы не могут до них достучаться (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPort | integer | Некоторые типы | Порт прокси (Обязательно для NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyLogin | string | Нет | Имя пользователя прокси, если прокси требует аутентификации (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPassword | string | Нет | Пароль прокси, если прокси требует аутентификации (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
userAgent | string | Нет | User-Agent браузера. Если в результате есть userAgent, используйте это значение при отправке токена (только NoCaptchaTask, RecaptchaV2EnterpriseTask) |
enterprisePayload | object | Нет | Дополнительные параметры Enterprise-версии, например значение s для reCAPTCHA Enterprise: {"s": "..."}. Не передавайте, если страница их не использует (только RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |
Как найти websiteURL и websiteKey, см. Как найти параметры reCAPTCHA.
Пример запроса
Заголовок раздела «Пример запроса»На примере официальной демо-страницы Google:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}Полный код: создаёт задачу, опрашивает результат каждые 5 секунд и выводит токен. Перед запуском поместите ClientKey в переменную окружения YESCAPTCHA_CLIENT_KEY:
curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}'
# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'import osimport time
import requests
API = "https://api.yescaptcha.com"CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable
def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data
def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id)
solution = solve({ "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",})print(solution["gRecaptchaResponse"])const API = 'https://api.yescaptcha.com';const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable
async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data;}
async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`);}
const solution = await solve({ type: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",});console.log(solution.gRecaptchaResponse);Для Enterprise-версии, если страница передаёт в reCAPTCHA значение s, укажите его в enterprisePayload:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV2EnterpriseTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "enterprisePayload": { "s": "S_VALUE_FROM_THE_PAGE" } }}Со своим прокси:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTask", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" }}Результат
Заголовок раздела «Результат»createTask возвращает ID задачи:
{ "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"}Передайте его в getTaskResult. Пока задача выполняется, возвращается {"errorId": 0, "status": "processing"} — повторите запрос через 5 секунд. Когда задача готова:
{ "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." }}| Поле | Тип | Описание |
|---|---|---|
gRecaptchaResponse | string | Токен, который нужно отправить на целевой сайт. Одноразовый, действителен около 120 секунд; используйте его в течение 60 секунд |
Задача выполняется не более 110 секунд; по истечении возвращается ERROR_TASK_TIMEOUT, а баллы возвращаются. При ошибке errorId равен 1, обрабатывайте её по errorCode, см. Коды ошибок. Как отправить токен, см. Как отправить токен reCAPTCHA.
Частые вопросы
Заголовок раздела «Частые вопросы»Почему токены для одного и того же сайта иногда проходят, а иногда нет?
Заголовок раздела «Почему токены для одного и того же сайта иногда проходят, а иногда нет?»Решение принимает целевой сайт. Он оценивает каждую проверку и сравнивает с порогом, который может изменить в любой момент, поэтому доля успешных проверок зависит от сайта, и не каждый токен проходит. Сравните результаты с другим типом задачи для той же капчи или перейдите на распознавание изображений.
Сколько действителен токен?
Заголовок раздела «Сколько действителен токен?»Токен одноразовый и действителен около 120 секунд; рекомендуем отправить его в течение 60 секунд после получения. Срок задаёт Google.
Списываются ли баллы, если решить не удалось?
Заголовок раздела «Списываются ли баллы, если решить не удалось?»Нет. Для задач с ответом ERROR_CAPTCHA_UNSOLVABLE или с тайм-аутом возврат баллов происходит автоматически, см. Тарификация и возврат баллов.