Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Как спарсить инфо с сайта с recaptcha?

#php #curl #recaptcha


Есть 2 сайта с формами поиска информации, мой и чужой, на чужом стоит recaptcha в
форме поиска (аякс запрос на скрипт). Требуется с чужого спарсить информацию, пользуясь
формой поиска моего сайта.

Мои действия.

1 вариант. Загружаю на своем сайте рекапчу с публичным ключом для своего домена и
отправляю разгаданный ключ g-recaptcha-response на чужой сайт. В ответ - ошибка 403.
Вероятно несоответсвие моего публичного ключа и приватного того домена.

2 вариант. Пытаюсь загрузить у себя в песочнице рекапчу с публичным ключом чужого
сайта - в ответ ошибка (на скриншоте). 



Вопрос - как мне спарсить инфо с такого сайта? Капчу не требуется взламывать, её
будет разгадываать человек, это не проблема.

Напоминаю, данное осуществимо, сервис Rucaptcha предоставляет услуги разгадывания
капч, в том числе и гугловскую рекапчу http://rucaptcha.com/api-rucaptcha#solving_recaptchav2_new

Дополнено 04.10.2017: Для пробы парсинга можете использовать форму с рекапчей на
моем тестовом стенде http://dev.drupalworld.ru/recaptcha/ - имитация чужого сайта.
    


Ответы

Ответ 1



Это можно сделать простым скриптом при достаточном везении. Если при создании ключей автор сайта не указал домен, на котором капча должна ра­ботать, то скрипт рекаптчи будет работать на любом домене. Конкретно это поле нужно было оставить пустым: Если это было так, то вы сможете попросить разгадать ту же самую капчу у вас на сервере с тем же самым sitekey:
Google не сможет проверить с того сайт разгадывается капча, или с другого. У упомянутой вами РуКапча используется самодельный браузер, в котором разрешена подмена window.location.href без перезагрузки страницы. Очевидно, это не вариант для обычных гостей сайта. Динамически этот ключ можно получить, но лучше будет кешировать его где-то чтобы не дёргать тот сайт каждый раз при открытии страницы. $contents = file_get_contents('http://dev.drupalworld.ru/recaptcha/'); preg_match('#data-sitekey="([-_A-Za-z0-9]+)"#', $contents, $match); $sitekey = $match[1]; Это было первое условие. Оно может быть выполнено если разработчик был ленив, и не стал получать ещё один ключ для локальной разработки, или не стал добавлять имя локального се­рвера к разрешенным в существующем ключе. Или не пользовался специальным ключом для разработчика. При создании ключа у вас в примере вы указали домен, значит такой трюк на вашем примере уже не получится провернуть. Второе условие: необходимо чтобы на целевом сайте использовалась самодельная функция для отправки результатов на сервер Google, которая не указывает IP разгадавшего капчу в па­раметре remoteip. Этот параметр пока ещё не является обязательным. Если такого параметра нет, то Google не сможет проверить что человек, разгадавший капчу, и человек, зашедший на сайт, тот же самый. Таким образом, если вам повезло по двум пунктам, то вы сможете разгадывать ту же самую капчу у вас на сайте. Если хотя бы по одному из пунктов вам не повезло, то пиши пропало. Простым скриптом такую капчу не обойти.

Комментариев нет:

Отправить комментарий