В рядах поддерживаемых нами сервисов для решения капчи пополнение. Встречайте сервис RuCaptcha.
Функционал сервиса схож с AntiCaptcha, позволяет решать все основные типы капч, а также поддерживает режим «proxyless», что весьма востребованно нашими пользователями. Цены на услуги у RuCaptcha ниже чем у сравнимого с ним сервиса AntiCaptcha. Но от всех остальных провайдеров, сервис RuCaptcha отличает то, что они предлагают решение для Google ReCaptcha v3. Мы его протестировали и оно действительно работает.
Более детальная информация об использовании сервиса по решению капч в вашем парсере доступна в нашей документации.
А ниже мы расскажем как использовать RuCaptcha для решения Google ReCaptcha v3 на примере сайта ГИБДД. А запрашивать мы будем информацию о регистрациях в ГИБДД по VIN номеру.
Для начала, зайдем на сайт ГИБДД и удостоверимся, что на странице с формой для поиска используется ReCaptcha v3. На первый взгляд, в исходном коде страницы не наблюдается линк на api.js от Google, поэтому автоматическое извлечение ключа сайта и параметра action работать не будет и нам надо найти их вручную. Если мы посмотрим во вкладку Сеть в консоли разработчика вашего браузера (Chrome/Firefox), то мы увидим что api.js все же подгружается, а значит подгрузка осуществляется не напрямую, а используя какой-то javascript. Поэтому нашей задачей будет отсмотреть все подгруженные JS файлы во вкладке Сеть.
Просматривая код JS файлов, мы увидим что в коде JS файла app.js есть интересный блок в конце:
/* reCaptcha */
var reCaptchaSiteKey = '6Lc66nwUAAAAANZvAnT-OK4f4D_xkdzw5MLtAYFL';
var onloadReCaptcha = function() {
grecaptcha.execute(reCaptchaSiteKey, {action: 'check_auto'})
.then(function(token) {
appVehicleCheck.reCaptchaToken = token;
});
}
Отсюда мы забираем ключ сайта (6Lc66nwUAAAAANZvAnT-OK4f4D_xkdzw5MLtAYFL) и параметр action (check_auto).
Далее нам надо определить какой запрос делает страница, когда мы нажимаем кнопку поиска. Для этого открываем панель разработчика в браузера, переходим во вкладку Сеть и ставим фильтр, чтобы нам показывались только XHR запросы.
Мы увидим, что загружается следующий ресурс: https://xn--b1afk4ade.xn--90adear.xn--p1ai/proxy/check/auto/history методом POST и туда передается VIN, тип проверки и токен Google ReCaptcha v3.
** Внимание!!! На текущий момент решение от RuCaptcha со score=0.3 не работает с сайтом ГИБДД. Пока мы ждем ответа от провайдера, можно использовать другой сервис Anti-captcha. Он позволяет использовать score = 0.7, который работает (но не в 100% случаев) с сайтом ГИБДД. Для этого в команде captcha_resolve в опции provider нужно указать anticaptcha (вам потребуется свой аккаунт в этом сервисе), также в опции apikey нужно будет указать ваш ключ в сервисе Anti-captcha и в minscore ставим 0.7. Как только мы получим комментарии и рабочее решение от RuCaptcha — мы обновим статью, следите за изменениями**
Таким образом, у нас есть все, чтобы написать парсер. ВНИМАНИЕ — парсер требует наличие русского прокси, доступ до данных для иностранных IP заблокирован:
---
config:
debug: 2
agent: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
proxy: ПОМЕСТИТЕ ВАШ ПРОКСИ СЮДА В ФОРМАТЕ 1.1.1.1:9999 (ИЛИ USER:PASS@1.1.1.1:9999 ПРИ ОРГАНИЗАЦИИ ДОСТУПА К ПРОКСИ ПО ПАРОЛЮ)
do:
# ПРЕДУСТАНАВЛИВАЕМ ПРОВЕРЯЕМЫЙ VIN В ПЕРЕМЕННУЮ
- variable_set:
field: vin
value: WVGZZZ7LZ8D050320
# ЗАГРУЖАЕМ СТРАНИЦУ С ФОРМОЙ ПОИСКА
- walk:
to: https://xn--90adear.xn--p1ai/check/auto/
do:
# РЕШАЕМ КАПЧУ
- captcha_resolve:
provider: rucaptcha
type: recaptchav3
apikey: ЗДЕСЬ ДОЛЖЕН БЫТЬ ВАШ RUCAPTCHA АПИ КЛЮЧ
sitekey: 6Lc66nwUAAAAANZvAnT-OK4f4D_xkdzw5MLtAYFL
minscore: 0.3
action: check_auto_history
# ЗАХОДИМ В БЛОК BODY НА СТРАНИЦЕ, ТАК КАК НАМ НУЖНО ПЕРЕЙТИ В БЛОКОВЫЙ КОНТЕКСТ
- find:
path: body
do:
# ЧИТАЕМ СОДЕРЖИМОЕ ПЕРЕМЕННОЙ captcha В РЕГИСТР (ИМЕЕНО В НЕЙ ДОЛЖЕН БУДЕТ НАХОДИТЬСЯ ТОКЕН)
- variable_get: captcha
# ПРОВЕРЯЕМ ЕСТЬ ЛИ У НАС ТОКЕН
- if:
match: \S
do:
# ДЕЛАЕМ POST ЗАПРОС ДЛЯ ЗАБОРА ГЕРИСТРАЦИОННЫХ ДАННЫХ
- walk:
to:
post: https://xn--b1afk4ade.xn--90adear.xn--p1ai/proxy/check/auto/history
data:
vin: <%vin%>
captchaWord: ''
checkType: history
reCaptchaToken: <%captcha%>
do:
# ПАРСИМ ДАННЫЕ И СКЛАДЫВАЕМ В ОБЪЕКТ
- find:
path: requestresult
do:
- object_new: vehicle
- find:
path: vehicle>enginevolume
do:
- parse
- object_field_set:
object: vehicle
field: engine_volume
- find:
path: vehicle>color
do:
- parse
- object_field_set:
object: vehicle
field: color
- find:
path: vehicle>bodynymber
do:
- parse
- object_field_set:
object: vehicle
field: body_number
- find:
path: vehicle>year
do:
- parse
- object_field_set:
object: vehicle
field: year
- find:
path: vehicle>enginenumber
do:
- parse
- object_field_set:
object: vehicle
field: engine_number
- find:
path: vehicle>vin
do:
- parse
- object_field_set:
object: vehicle
field: vin
- find:
path: vehicle>model
do:
- parse
- object_field_set:
object: vehicle
field: model
- find:
path: vehicle>category
do:
- parse
- object_field_set:
object: vehicle
field: category
- find:
path: vehicle>type
do:
- parse
- object_field_set:
object: vehicle
field: type
- find:
path: vehicle>powerhp
do:
- parse
- object_field_set:
object: vehicle
field: power_hp
- find:
path: vehicle>powerkwt
do:
- parse
- object_field_set:
object: vehicle
field: power_kwt
- find:
path: vehiclepassport>number
do:
- parse
- object_field_set:
object: vehicle
field: passport_number
- find:
path: vehiclepassport>issue
do:
- parse
- object_field_set:
object: vehicle
field: passport_issued
- find:
path: ownershipperiod
do:
- object_new: ownership
- find:
path: from
do:
- parse
- object_field_set:
object: ownership
field: from
- find:
path: to
do:
- parse
- object_field_set:
object: ownership
field: to
- find:
path: simplepersontype
do:
- parse
- object_field_set:
object: ownership
field: owner_type
- find:
path: lastoperation
do:
- parse
- object_field_set:
object: ownership
field: operation_type
- object_save:
name: ownership
to: vehicle
- object_save:
name: vehicle
Если мы запустим его на платформе Diggernaut (естественно, вы должны будете использовать ваш API ключ в сервисе RuCaptcha в коде парсера), то мы получим следующий датасет (приводим пример выгрузки датасета в формате JSON):
[{
"vehicle": {
"category": "В",
"color": "ЧЕРНЫЙ",
"engine_number": "080571",
"engine_volume": "2967.0",
"model": "ФОЛЬКСВАГЕН ТОUАRЕG",
"ownership": [
{
"from": "2008-05-22T00:00:00.000+04:00",
"operation_type": "11",
"owner_type": "Natural",
"to": "2011-12-10T00:00:00.000+04:00"
},
{
"from": "2011-12-10T00:00:00.000+04:00",
"operation_type": "06",
"owner_type": "Natural",
"to": "2017-02-02T00:00:00.000+03:00"
},
{
"from": "2017-02-02T00:00:00.000+03:00",
"operation_type": "03",
"owner_type": "Natural"
}
],
"passport_issued": "ТАМОЖНЯ: 10009191",
"passport_number": "78ТУ623619",
"power_hp": "224",
"power_kwt": "164.8",
"type": "21",
"vin": "WVGZZZ7LZ8D050320",
"year": "2008"
}
}
]
Добрый день. ГИБДД внесли изменения на свой сайт, данный способ теперь не работает. Что можно с этим сделать? В инкогнито в браузере не срабатывает поиск
Похоже, что они увеличили score для капчи. Нашли решение?
Мы отправили запрос в RuCaptcha, пока ответа нет. Сегодня попробуем решение от anti-captcha. О результатах напишем тут.
Антикапча работает, но не в 100% случаев. И надо ставить minscore: 0.7. В статью поместили комментарий о том, какие изменения нужно внести в код, чтобы работать с Anti-captcha.
У RuCaptcha в документации написано, что больше 0,6 они отвечают редко, а 0.9 получить почти невозможно
На текущий момент статистика по RuCaptcha score=0.6 такая:
5 попыток — все вернули Captcha is not solvable — работоспособность 0%
Статистика по anticaptcha score=0.7:
5 попыток — 2 удачные, 3 вернули плохой токен — работоспособность 40%
Попробовал АнтиКапчу. Бесполезно, никаких 40% нет, к сожалению. Круглый 0
У них похоже проблемы, их много сканят и сервер не выдерживает, у них сейчас даже при проверке руками капча через раз выдает «Проверка с помощью Google reCaptcha v3 не пройдена…», переодически вообще перестает работать
Антикапча при скоре 0.7 тоже не каждый раз дает решение капчи.
сервис.гибдд.рф — начали банить IP, чего раньше не делали
Получили ответ от РуКапчи, работы ведутся над тем чтобы была возможность получать score 0.9. ETA пока нет.
Да, подтверждаю, начали банить. Раньше все хорошо работало, а на неделе прокси улетел в бан.
Подскажите а в чем проявляется бан. Просто не принимает каптчи?
Да, подтверждаю, начали банить. Раньше все хорошо работало, а на неделе прокси улетел в бан.
Не могу понять — токен получает, а в ответе — Проверка с помощью Google reCaptcha v3.
С чем это связано
Возможно нужно поиграться с параметром minscore: 0.3
Что антикапчта, что рукапча с minscore от 0.3 — 0.9 дают токен => результат 0.
На неделе протестируем оба сервиса, если обнаружим проблемы, перенаправим запрос в rucaptcha / anticaptcha.
Добрый день. Подскажите, если использовать решения, такие как phantomJS и подобные — все так же — вопрос с капчей не обойти? Для себя решил по другому — просто интересно кто использует — есть ли результат.
Возможно v3 будет работать на headless браузерах, но сами мы это не тестировали. Попробуем на неделе провести ряд тестов.
Добрый день!
Есть результат от RuCaptcha в плане решения v3?
Думаю лучше вопрос адресовать напрямую в RuCaptcha, в данный момент мы не владеем оперативной информацией по этому вопросу
Михаил, добрый вечер!
Мне необходимо собирать инфу с РСА ОСАГО, у них на сайте стоит капча v2., не подскажете, куда копать, чтобы обходить её?
Нужен проверка с помощью google recaptcha v3 не была пройдена повторите попытку что это значит
Это означает, что сайт не принял решенную капчу. Такое бывает, особенно часто с v3.