Yandex SmartCaptcha
Обратите внимание, что данная капча подразделяется на два вида:
Сервисы Яндекса
Сторонние сайты
Методы решения этих видов различаются.
SmartCaptcha на сервисах Яндекса
Данный вид капчи открывается на отдельной странице (например https://ya.ru/showcaptcha?…).
Для создания запроса на решение данного вида капчи потребуются следующие данные:
Параметр | Тип | Обязательный | Значение |
type | String | да | YandexSmartCaptchaTaskProxyless |
websiteURL | String | да | Адрес страницы, на которой решается капча. Например https://ya.ru/showcaptcha?… |
websiteKey | String | да | yandex |
htmlPageBase64 | String | да | Закодированная в base64 html страница с капчей. |
userAgent | String | да | UA от chromium браузера |
В ответ вы получите следующий объект:
Свойство | Тип | Описание |
cookies | Object | Данное свойство содержит объект с куками, которые нужно установить в свой браузер либо в заголовки запросов. На данный момент это только куки “spravka”. |
redirectedUrl | String | URL адрес, на который вам нужно будет перейти с установленными куками. Используйте именно его. Обычно он содержит изначально запрашиваемую вами страницу. |
referrer | String | Referrer, который нужно ОБЯЗАТЕЛЬНО использовать при переходе на redirectedUrl |
SmartCaptcha на сторонних сайтах
Выглядит подобно многим другим видам капч. Обычный виджет с чекбоксом:
Данный вид капчи отлично решается с помощью токена. Запрос на решение такой капчи выглядит совершенно обыденно:
Параметр | Тип | Обязательный | Значение |
type | String | да | YandexSmartCaptchaTaskProxyless |
websiteURL | String | да | Адрес страницы, на которой решается капча. |
websiteKey | String | да | Sitekey, с которым рендерится капча. В большинстве случаев вытаскивается из кода страницы |
Ответ:
Свойство | Тип | Описание |
token | String | Вставьте значение токена в поле smart-token на странице с капчей |
Примеры запросов
Сервисы Яндекса.
Создание запроса:
Адрес https://api.capmonster.cloud/createTask
{
"clientKey":"dce6bcbb1a728ea8d871de6d169a2057",
"task":{
"type":"YandexSmartCaptchaTaskProxyless",
"websiteURL":"https://ya.ru/showcaptcha?cc=1&mt=C934C537A3644...",
"websiteKey":"yandex",
"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
"htmlPageBase64":"PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db...0L2phdmFzY3JpcHQiPjwvc2NyaXB0PjwvYm9keT4="
}
}
Ответ:
{
"errorId":0,
"taskId":407533072
}
Получение результата:
Используйте метод getTaskResult чтобы получить решение.
Адрес https://api.capmonster.cloud/getTaskResult
{
"clientKey": "dce6bcbb1a728ea8d871de6d169a2057",
"taskId": 407533072
}
Ответ:
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"cookies": {
"spravka": "dD0xNjkzMjI1MTE0OTZF...0ZDJlNDhiYjcxNTBjZWYzYzg2ODdhOQ=="
},
"redirectedUrl": "https://ya.ru/?nr=1&redirect_ts=169...87.00000",
"referrer": "https://ya.ru/checkcaptcha?key=c57865...",
},
"status": "ready",
}
Сторонние сайты:
Создание запроса:
Адрес https://api.capmonster.cloud/createTask
{
"clientKey":"dce6bcbb1a728ea8d871de6d169a2057",
"task":{
"type":"YandexSmartCaptchaTaskProxyless",
"websiteURL":"https://example.com/captcha",
"websitekey":"FEXfAbHQsToo9...1DgdxjtNB9"
}
}
Ответ:
{
"errorId":0,
"taskId":407533072
}
Получение результата:
Используйте метод getTaskResult чтобы получить решение.
Адрес https://api.capmonster.cloud/getTaskResult
{
"clientKey": "dce6bcbb1a728ea8d871de6d169a2057",
"taskId": 407533072
}
Ответ:
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "dD0xNjkzMjI1OT...mNjMTExMTM5ZmVkMDRlMg=="
},
"status": "ready"
}
Пример работы с ZennoPoster
Шаг 1. Сбор данных
Переходим на https://ya.ru в Zennoposter и встречаем страницу с капчей:
Для создания запроса на решение капчи нам нужно получить с этой страницы 2 параметра: websiteURL и htmlPageBase64.
Займёмся получением исходного кода страницы и кодировкой его в base64.
Для этого выбираем
Затем настраиваем кубик следующим образом:
После выполения кубика в переменной проекта “html“ будет находиться содержимое страницы. Нам нужно закодировать его в base64. Сделать это можно с помощью короткого C# сниппета:
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(project.Variables["html"].Value);
return System.Convert.ToBase64String(plainTextBytes);
Теперь закодированная страница находится в переменной “encodedHtml“.
Текущий websiteUrl можно взять с помощью встроенного макроса {-Page.Url-}.
Шаг 2. Создание запроса на решение капчи
Для отправки запроса на сервис CapmonsterCloud воспользуемся кубиком “Post запрос“
Настроим кубик следующим образом:
После выполнения кубика в переменной cmcloudResponse
будет примерно следующее содержимое:
{"taskId":989589591,"errorId":0,"errorCode":null,"errorDescription":null}
Чтобы забрать ответ от сервиса нам нужно вытащить значение поля taskId
. Сделать это можно разными способами, но быстрее всего воспользоваться регулярным выражением:
(?<=\{"taskId":).*?(?=,)
Похожим образом создаём ещё один кубик POST-запроса, но уже для получения решения от сервиса:
Если сервис решил капчу, то после выполнения кубика мы получим следующий ответ:
{
"solution": {
"cookies": {
"spravka": "dD0xNjk1NzI5..zlmMg=="
},
"redirectedUrl": "https://ya.ru/?nr=1&redirect_ts=16957...00",
"referrer": "https://ya.ru/showcaptcha?cc=1&mt=591BE798EABB444CC0B912483...f295d818d2"
},
"cost": 0.001,
"status": "ready",
"errorId": 0,
"errorCode": null,
"errorDescription": null
}
Спарсим нужные данные из ответа с помощью обработки JSON. Для этого выполним следующие шаги:
Шаг 3. Применение данных
Первым делом следует разобраться с куками. Чтобы всё стало понятнее, давайте проведём небольшой ресёрч, дабы понять как именно яндексу нужно скормить полученные от сервиса куки. Для этого просто руками пройдём капчу, а затем экспортируем куки в какую-нибудь переменную и изучим как они выглядят:
В переменной browserCookies
увидем примерно такой текст:
// ... тут много разных кук
.ya.ru TRUE / FALSE 10/26/2023 14:09:45 spravka dD0xNjk1NzMwMTg1O2k9MmEwZjozMTAxOmJkZjM6ZDM4MTo2NjY2OmY0OTE6M2M1MjpkYjEyO0Q9OUQyMjcwQURFNkU0MTU0QzA0NkUyNEUwMjU3OEQ3N0NGRDFCOEE5ODE0ODhDMzkzQjJGNTkzRURDQTcwNzdBQUNGNjA1MEMwMzQxNzFENzA5Qzg3RkEwM0JBOTVFNjcxMkNFNzk1QjYyQzFFMjI0QUY4RjFGMTFGOUYxNTdGOUM2NUU3RTI5RjUzMzg5QkNDQjA3Qjk4ODZBNjt1PTE2OTU3MzAxODUzNzQxNzE5ODU7aD03MjU2Y2ZiMGEzYjViY2I0Nzk3NGIxNmEwZWZiMDFjNA== FALSE FALSE Unspecified Medium
// ... тут тоже много разных кук
Теперь мы можем просто вытащить эту строчку, но подставить в неё значение кук от сервиса. Для этого воспользуемся кубиком “Обработка текста” и регулярным выражением:
Далее импортируем куки в браузер с помощью того же кубика “Работа с Cookies“:
Осталось только перейти на страницу c полученными ранее данными redirectedUrl и referrer: