[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как получить изменённую скриптами страницу?
Страницы: 1, 2
Altai
Пытаюсь написать парсер сайта fl.ru используя библиотеку curl, для этого мне нужно авторизоваться. Раньше получалось без проблем - отправил методом post логин, пароль и hidden поле - и авторизация прошла. Но потом на сайте ввели token поле, которое создаётся уже после генерации страницы с помощью javascript. Как мне получить с помощью curl библиотеки страницу, на которой сработали уже все скрипты?
kaww
Цитата (Altai @ 6.11.2015 - 05:01)
Как мне получить с помощью curl библиотеки страницу, на которой сработали уже все скрипты?

Никак.
Смотри откуда берется токен (где его получает js) и бери его там же.
Altai
Цитата (kaww @ 6.11.2015 - 09:15)
Никак.
Смотри откуда берется токен (где его получает js) и бери его там же.

Ну в принципе логично, но у меня возник другой вопрос - а можно как-то подключить к уже полученной странице свой скрипт, который отработает на этой уже полученной странице и аяксом пошлёт мне нужные данные?
kaww
Тут речь уже про браузер, верно? http://stackoverflow.com/questions/9413737...t-in-javascript
Altai
Цитата (kaww @ 6.11.2015 - 10:58)
Тут речь уже про браузер, верно? http://stackoverflow.com/questions/9413737...t-in-javascript

Нет, речь про то, можно ли как-то с помощью curl послать на страницу свой контент, в данном случае в виде своего скрипта. Ну т.е. после того, как мы получили с помощью curl страницу, на ней автоматически запускается наш скрипт, посланный на неё вместе с запросом (по крайней мере я так себе это представляю), который получает нужную нам информацию и с помощью ajax отправляет её нам. Как-то так..
Altai
Вопрос решен, всем спасибо за внимание wink.gif
sapphire08
Цитата (Altai @ 7.11.2015 - 20:27)
Вопрос решен, всем спасибо за внимание ;)

Ну кто ж так делает, ну хоть бы написали решение, в чем была проблема..
Вот столкнулся с тем, что был у меня скрипт который с полгода назад отлично работал (проходил авторизацию на fl.ru), а сейчас - ни в какую.

Беру со страницы u-token, отправляю все необходимые параметры POST запросом (action=login&autologin=1, а так же пароль, логин), куки сохраняются (т.е. при каждой новой загрузке токен один и тот же), явных ошибок нет, но страница упорно загружается неавторизованной (главная).

В чем беда, никак не пойму.
Включал запись лога CURLOPT_STDERR в файл, там все проходит отлично, параметры отправляются...
Что ж делать-то? :unsure:

Вот код, проверьте кто-нибудь, по-возможности, пожалуйста:
include_once('simple_html_dom.php');

$cl = curl_init();
$email = 'example@email.com';

curl_setopt($cl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0");
curl_setopt($cl, CURLOPT_VERBOSE, true);
$verbose = fopen('logs/curl_fl.txt', 'w+');
curl_setopt($cl, CURLOPT_STDERR, $verbose);

//Загружаем страницу первый раз для получения токена
curl_setopt($cl, CURLOPT_URL, 'https://www.fl.ru');
curl_setopt($cl, CURLOPT_REFERER, 'https://www.fl.ru/');
curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($cl, CURLOPT_HEADER,1);
curl_setopt($cl, CURLOPT_TIMEOUT, 10);
curl_setopt($cl, CURLOPT_COOKIEJAR, 'cookies/cookie_fl.txt');
curl_setopt($cl, CURLOPT_COOKIEFILE, 'cookies/cookie_fl.txt');
curl_setopt($cl, CURLOPT_POSTREDIR, 3);
curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, 0);

$data = curl_exec($cl);

$html = str_get_html($data);

$scripts = $html->find("script");
foreach ($scripts as $script){
preg_match("/_TOKEN_KEY\s+=\s+\'\w+\'/", htmlentities($script->innertext), $res1);
if (!empty($res1)) break;
}
$res1 = explode('=',$res1[0]);
$token = str_replace(array(' ','\''),"",$res1[1]);

curl_setopt($cl, CURLOPT_POST, 1);
curl_setopt($cl, CURLOPT_POSTFIELDS, 'https://www.fl.ru/login&action=login&autologin=1&login='.urlencode($email).'&passwd=******&u_token_key='.$token);

$data = curl_exec($cl);
curl_close($cl);

echo $data;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.