Перейти к содержимому

Обход каптчи Яндекса с помощью rucaptcha.соm

yandex - Поиск в GoogleСтатья описывает один из способов получения данных от поисковой системы Яндекс с помощью сервиса распознавания каптчи.

Для этого нам необходимо:

  1. ресурс в сети с доступом по FTP (для закачки файлов) и доступным PHP (для выполнения команд)
  2. регистрация на сервисе rucaptcha.соm с оплаченным профилем (от туда необходимо взять API)

Принцип работы:

  1. Берем необходимый поисковый адрес
  2. Отправляем адрес Яндексу(запрашиваем)
  3. Проверяем, спрашивает ли у нас Яндекс ввод каптчи?
  4. Если нет то мы уже получили страницу от Яндекс
  5. Если спрашивает, тогда получаем изображение и необходимые поля формы
  6. Шлем изображение в rucaptcha.соm и в цикле ждем ответ
  7. Получили ответ (распознанный текст) и шлем текст с полями формы Яндексу
  8. В результате получаем страницу Яндекса с необходимой информацией (если конечно распознали правильно)

1. Поисковый адрес — их можно найти в Интернет или скопировать из адресной строки браузера.

$url = 'http://yandex.ru/yandsearch?text=url:alneo.ru*&numdoc=50';

2. Отправка данных будет происходить с помощью функции get_webpage 

$page = get_webpage($url);

function get_webpage($url,$cookie){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
	curl_setopt($ch, CURLOPT_TIMEOUT_MS, '10000');
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
	curl_setopt($ch, CURLOPT_FRESH_CONNECT, FALSE);
	curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
	curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
	curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
	$data = curl_exec($ch);
	if ($data)
		return $data;
	else
		return 'CURL failed';
}

3. Отправка поискового запроса(страницы) и Проверка записаны в одну функцию get_serp_page

function get_serp_page($url){//ПОЛУЧАЕМ ТЕКСТ И ПРОВЕРЯЕМ ЕСТЬ ЛИ КАПТЧА
	$page = get_webpage($url);
	preg_match('|<img src="(.*)" class="b-captcha__image">|isU', $page, $matches);
	if(isset($matches[1])){
		$page = break_captcha($page,$matches[1]);
	}
	return $page;
}

здесь происходит отправка страницы Яндексу и разбор с помощью регулярных выражений ответа (ищем картинку с циферками, уже букавками русскими)

6. Отправка каптчи в сервис распознавания с помощью функции break_captcha

$page = break_captcha($page,$matches[1]);

  • $page — текст страницы с каптчей
  • $matches[1] — картинка(адрес, атрибут src) каптчи
function break_captcha($page,$src_img){//АНАЛИЗИРУЕМ КАПТЧУ
	preg_match_all("#spravka=(.*?);#", $page, $t); $cookie = $t[1]; 
	preg_match('|name="key" value="(.*)">|isU', $page, $t); $key = $t[1]; 
	preg_match('|name="retpath" value="(.*)">|isU', $page, $t); $retpath = $t[1];
	$captcha = file_get_contents($src_img);
	file_put_contents('ya_cap.gif', $captcha);
	$text=recognize("ya_cap.gif","вставить свой API key",false,"rucaptcha.com");
	$m1=array('%2A','%26amp%3B');$m2=array('*','%26');
	$yurl = 'http://yandex.ru/checkcaptcha?key='.urlencode($key).'&retpath='.str_replace($m1,$m2,urlencode($retpath)).'&rep='.rawurlencode($text).'';
	$page = get_webpage($yurl,$cookie);
	if (stripos($page, 'введите цифры с картинки') > 0){
		echo "<br>Снова капча :-( <br>";
		exit();
	}
	return $page;
}

здесь получаем поля формы key и retpath, поле spravka — не используется, куки берутся при использовании cURL и сохраняются/загружаются в/из файл cookie.txt с помощью CURLOPT_COOKIEJAR/CURLOPT_COOKIEFILE

$captcha = file_get_contents($src_img);
file_put_contents(‘ya_cap.gif’, $captcha);

сохраняем каптчу в файл

и отправляем с помощью recognize в распознавание (необходимо подключить API отдельным файлом)

Далее идет преобразование адреса в нормальный вид (иначе получим 404 страницу)

и опять получаем страницу но уже страницу а не каптчу (если правильно распознали)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.