Встроить обход recaptcha в парсер на php (curl)
3 000 руб. за проект
Есть парсер сайта, сделанный на php (curl) (прокси, аторизация, парсер).
На сайте ввели капчу (reCaptcha), которую нужно обходить.
Собственно, нужно встроить в скрипт работу с одним из сервисов по решению капчи (rucaptcha.com или anti-captcha.com например).
При этом нужно решить проблему с долгой сессией - обход капчи занимает около 30 секунд, плюс прокси может добавить секунд 10, что в итоге может дать 504 Gateway Time-out.
функция авторизации в настоящий момент выглядит примерно так
function authorize()
{
global $ch, $session_key,$conn;
$sql = "SELECT login, password FROM logins";
$result = $conn->query($sql);
while ($record = $result->fetch_row()){
$logins[] = array($record[0],$record[1]);
}
$randomlogin = array_rand($logins,1);
$session_key='';
//сначала получим session_key
$url = "https://XXXXX.com/login";
curl_setopt($ch, CURLOPT_URL, $url); // отправляем на
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Не проверять SSL сертификат
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // Не проверять Host SSL сертификата
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Записать http ответ в переменную, а не выводить в буфер
$page = curl_exec($ch);
$document = phpQuery::newDocument($page); //Загружаем полученную страницу в phpQuery
$session_key = $document->find('#session_key')->attr('value');
//теперь авторизуемся и запишем куки
$url = 'https://XXXXX.com/login';
curl_setopt($ch, CURLOPT_URL, $url); // отправляем на
curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt'); // сохранять куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_POST, 1); // использовать данные в post
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'username' => $logins[$randomlogin][0],
'password' => $logins[$randomlogin][1],
'session_key' => $session_key,
));
$page = curl_exec($ch);
$document = phpQuery::newDocument('<meta charset="utf-8">' .$page);
$username = $document->find('span.username');
if ($username<>""){
echo 'Авторизовались как '.$username.'</br>';
} else {
exit('Ошибка авторизации');
}
}
На сайте ввели капчу (reCaptcha), которую нужно обходить.
Собственно, нужно встроить в скрипт работу с одним из сервисов по решению капчи (rucaptcha.com или anti-captcha.com например).
При этом нужно решить проблему с долгой сессией - обход капчи занимает около 30 секунд, плюс прокси может добавить секунд 10, что в итоге может дать 504 Gateway Time-out.
функция авторизации в настоящий момент выглядит примерно так
function authorize()
{
global $ch, $session_key,$conn;
$sql = "SELECT login, password FROM logins";
$result = $conn->query($sql);
while ($record = $result->fetch_row()){
$logins[] = array($record[0],$record[1]);
}
$randomlogin = array_rand($logins,1);
$session_key='';
//сначала получим session_key
$url = "https://XXXXX.com/login";
curl_setopt($ch, CURLOPT_URL, $url); // отправляем на
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Не проверять SSL сертификат
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // Не проверять Host SSL сертификата
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Записать http ответ в переменную, а не выводить в буфер
$page = curl_exec($ch);
$document = phpQuery::newDocument($page); //Загружаем полученную страницу в phpQuery
$session_key = $document->find('#session_key')->attr('value');
//теперь авторизуемся и запишем куки
$url = 'https://XXXXX.com/login';
curl_setopt($ch, CURLOPT_URL, $url); // отправляем на
curl_setopt($ch, CURLOPT_HEADER, 0); // пустые заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // следовать за редиректами
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);// таймаут4
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt'); // сохранять куки в файл
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_POST, 1); // использовать данные в post
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'username' => $logins[$randomlogin][0],
'password' => $logins[$randomlogin][1],
'session_key' => $session_key,
));
$page = curl_exec($ch);
$document = phpQuery::newDocument('<meta charset="utf-8">' .$page);
$username = $document->find('span.username');
if ($username<>""){
echo 'Авторизовались как '.$username.'</br>';
} else {
exit('Ошибка авторизации');
}
}
Отзывы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.