Задать вопрос
AlexBraun87
@AlexBraun87

Как получить ссылку на страницу которая генерируется за счёт AJAX?

Разрабатываю парсер для сайта, чтобы собирать ссылки на все свежие данные и хранить в одном месте.
Основной контент генерируется в таблице. Нужно получить ссылки на "Предмет торгов по лоту".
Пробовал за счёт POST запроса через CURL, но открывается эта же первая страница со списком лотов. Возможно делаю пост запрос не на тот адрес.

Код такой:
$curl = new \Curl\Curl();
        $curl->setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 OPR/94.0.0.0');
        $curl->setConnectTimeout(60);
        $curl->setTimeout(60);
        $curl->setReferrer('https://site.ru/lots.xhtml?sgUnid=3');
        $curl->setOpt(CURLOPT_SSL_VERIFYHOST, FALSE); 
        $curl->setOpt(CURLOPT_SSL_VERIFYPEER, FALSE);
        $curl->setHeader('X-Requested-With', 'XMLHttpRequest');
        $curl->setHeader('Accept', 'application/xml, text/xml, */*; q=0.01');
        $curl->setHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        
        // POST параметры
        $curl->post('https://site.ru/lots.xhtml?sgUnid=3', [
            // 'javax.faces.partial.ajax' => 'true',
            // 'javax.faces.source' => 'formMain:lotListTable:1:lotOpenCardLink',
            // 'javax.faces.partial.execute' => 'formMain:lotListTable:10:lotOpenCardLink',
            'formMain:lotListTable:10:lotOpenCardLink' => 'formMain:lotListTable:10:lotOpenCardLink',
            'formMain' => 'formMain',
            'formMain:inputServerTime' => date('H:i:s'),
            'formMain:commonSearchCriteriaStr' => '',
            'formMain:inputKeyWordId' => '',
            'formMain:orgSubId' => '',
            'formMain:debtSubId' => '',
            'formMain:fromIdPeriod_input' => '',
            'formMain:toIdPeriod_input' => '',
            'formMain:fromIdAcceptancePeriod_input' => '',
            'formMain:toIdAcceptancePeriod_input' => '',
            'formMain:j_idt71' => '',
            'formMain:j_idt73' => '',
            'formMain:sgTable:2:j_idt79_input' => 'on',
            'formMain:sgTablePanel_collapsed' => 'false',
            'formMain:taTablePanel_collapsed' => 'true',
            'formMain:stateTablePanel_collapsed' => 'true',
            'formMain:j_idt99_scrollState' => '0,0',
            'formMain:selectTreeDlgPanel_collapsed' => 'true',
            'formMain:selectRegTreeDlgPanel_collapsed' => 'true',
            'formMain:objFilterPanel_collapsed' => 'false',
            'formMain:lotListTable_rppDD' => '50',
            'formMain:selectTreeDlgTree_selection' => '',
            'formMain:selectTreeDlgTree_scrollState' => '0,0',
            //'javax.faces.ViewState' => '-6753758380431000397:-233516132474512352'
        ]);
        
        if ($curl->error) {
            echo 'Error: ' . $curl->errorMessage . "\n";
        } else {
            echo 'Response:' . "\n";
            var_dump($curl->response);
        }
        
        var_dump($curl->requestHeaders);
        var_dump($curl->responseHeaders);


63b2f71b39180283749409.jpeg

В пост параметрах передаётся такое 'formMain:lotListTable:10:lotOpenCardLink', 10 это номер лота сверху в таблице которая сгенерировалась. Отсчёт начинается с ноля.

Я так понял сайт написан на C# и работает на основе AJAX. Прямых ссылок почти нет.

Есть кто с подобным сталкивался и подскажет куда копать чтобы получить ссылки на "Предмет торгов по лоту".
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
Боюсь ваш вопрос несколько выходит за рамки бесплатной консультации :)
Ответ написан
Griboks
@Griboks
Вам нужен программный браузер, который эмулирует не только html, но еще и css+js. Обычно для таких задач используй selenium в режиме скрытого (headless) браузера (нужно будет дополнительно установить один из популярных браузеров и движок к нему).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы