Как побороть капчу яндекса?
Коллеги, добрый день!
В процессе написания собственного скрипта проверки позиций в яндексе, я столкнулся с проблемой "бесконечной" капчи. Вкратце суть в следующем: Скрипт дергает страницу по адресу вида "http://yandex.ru/yandsearch?text=ПОИСКОВЫЙ_ЗАПРОС&lr=213". Если всё ок, то парсит её. Если появляется страница с капчей, то капча посылается на разгадывание в antigate. НО! После ввода капчи, вновь появляется страница с капчей, причем не потому что был неправильный ввод. Капча вводится правильная. А теперь самое интересное. Если по ходу работы скрипта, взять урл страницы с капчей, открыть её в браузере, и ввести капчу руками, то появляется требуемая страница выдачи. Соответственно, проблема в том, что яша как-то все-таки палит, что запрос идет не от человека, а от робота. Но как он это делает, я так и не понял. |
Цитата:
|
Цитата:
|
попробуй вот так
http://yandex.ru/yandsearch?text=ПОИСКОВЫЙ_ЗАПРОС&lr=0 в конце 0 - тоесть не учитывается регион 213 - это предпочтение сайтам из Москвы и области или вот так еще поробуй http://yandex.ru/yandsearch?date=&te...numdoc=10&lr=0 |
Цитата:
Далее, если капча правильная, то идет 302-перенаправление на урл, записанный в retpath, который и является тем самым урлом, который запрашивал скрипт, в надежде получить страницу выдачи. В браузере мы получаем выдачу, а робот опять получает перенаправление на страницу капчи, и так до бесконечности. klyop-sanya, во-первых мне нужна именно москва, а во-вторых, всякие вариации запросов я уже пробовал, не помогает. volkovysk, откуда по-вашему вообще мог взяться реферер чужого домена? А вообще, если вводить капчу через браузер и НЕ передавать при этом реферер, то всё работает. Проблема не в этом. |
Цитата:
|
Цитата:
Но проблема 100% не в этом, потому что, если после ввода скриптом капчи прервать скрипт, взять урл из location-а, который получется при редиректе и ввести его в браузере ВООБЩЕ БЕЗ КУК, то браузер получает выдачу, какую надо, хотя тут уже явное палево, что как-минимум кук нет (или они не те), и юзер-агент другой. |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Deicider, А метод отправки расшифрованой капчи яндексу не забыли проверить гет или пост?
Добавлено через 11 минут А временной промежуток между выдачей яндексом капчи и её водом учитывали в скрипте? Яндекс понимает, что человек за 2 милисекунды капчу не введёт. Короче не для вашего уровня клепать роботов для высокотехнологичного яндекса. |
Цитата:
zhegloff, после ввода капчи редирект ведет как раз на исходный урл, то есть на него мы и идем. volkovysk, метод отарвки GET. Временной промежуток 10-15 секунд, быстрее ответ от антигейта и не приходит. И не надо переходить на личности и высказываться о моем уровне. |
Цитата:
Короче чё гадать, скрипт надо в студию. На каком он языке писан? |
Привожу фрагмент кода, который отвечает за получение страниц серпа. Для примера кокрентый поисковый запрос захардкоден. Код доступа к антигейту не палю. Если кто-то вызовется помочь со скриптом, но не имеет акка на антигейте, то могу скинуть в личку.
PHP код:
|
Deicider, $retpath кодировать в urlencode() надо, когда капчу отправляете. Ну и полученные куки сохранять само собой.
|
Deicider, тебе яндекс всегда капчу заставляет вводить или как когда? А то я ща с локалхоста стал яндекс бомбить этим скриптом, он мне не предлагает. А urlencode() так это ясно надо.
Добавлено через 20 минут ... или $retpath уже обкодированый находится в форме input name="retpath" ? |
В свое была такая же проблема. Суть в том, что после ввода капчи Яндекс вешал куку и без нее как раз был такой эффект - постоянная капча.
Если говорить, о том что можно взять этот урл (который после рекогнайза капчи получается) и вставить в браузер и все заработает, то вот мнение: яндекс отличит, что запрос от другого "клиента" пришел. Не только по ip же ему классифицировать пользователей. В этом случае выходит, что и без капчи через браузер получится работать. (При том что с того же компа, скриптованные запросы будут получать ее) |
Wink, volkovysk, retpath в форме уже урл-кодированный по самое нехочу ))
Насчет кук надо будет поглубже покопаться. Документация PHP говорит: Цитата:
Добавлено через 40 минут Изучение http-заголовков показало, что при вводе капчи действительно устанавливается дополнительная кука (кука по имени "spravka", см. код). Теперь нужно проверить, передает ли эту куку КУРЛ. Код:
http://yandex.ru/yandsearch?p=32&text=sony&text=213&lr=213 |
точно, яндекс падла с сзади как ножом в спину куку spravka подсовывает. Deicider, попробуй теперь с помощью CURLOPT_COOKIE обработать.
Добавлено через 10 минут Да я понял, скорей всего, у тебя курл не реагировал на установку куки spravka, в результате чего терялась имитация браузера (нормальный браузер регирует , он отказ шлёт, если выключить приём кукиес). Тебе надо эту куки принять и например так curl_setopt($ch, CURLOPT_COOKIE, $cookie) куку посслать дальше яндексу. |
Собственно, подозрения подтвердились. Просмотр с помощью CURLINFO_HEADER_OUT сделанных курлом запросов показал, что ни хрена никакие куки не передаются. Пришлось немного заморочиться. Я доработал эту функцию, чтобы она сохраняла и передавала куки, и проблема решилась. Правда, яша выдает капчу на каждый запрос серпа (в браузере же капча вновь появляется только после 30-50 запросов), но при текущих тарифах на антигейт это пустяки.
Теперь возникает вопрос, а не взбредёт ли Яшке в голову пессимизировать мой сайт, висящий на ip, с которого я буду атаковать его этим роботом. |
Часовой пояс GMT +3, время: 12:01. |
Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.