Задать вопрос
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. Прямых ссылок почти нет.

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽