@mrantony

Как обойти JS скрипт, мешающий спарсить страницу?

Всем доброго вечера!
При попытке спарсить страницу получаю вот такой результат:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
   <script type="text/javascript">
     (function() {
       var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

       xhr.onreadystatechange = function() {
         if (xhr.readyState == 4 && xhr.responseText == 1) {
           var date = new Date();
           date.setTime(date.getTime() + 60000);
           document.cookie = 'referrer=' + encodeURIComponent(document.referrer);
           window.location = window.location.href;
           if(window.location.hash.length) location.reload();
         }
       };

       var url = location.protocol + '//' + location.hostname + '/check.page';
       var data = 'ua=' + encodeURIComponent(navigator.userAgent) + '&sec=' + encodeURIComponent('superkey14') + '&rnd=' + Math.random() + '&loc=' + encodeURIComponent(window.location.href);

       xhr.open('POST', url, true);
       xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
       xhr.send(data);
     })();
   </script>
 </head>
 <body></body>
</html>


Тот же результат если открыть просмотр кода в Хроме.
Попробовал PHP PHANTOMJS.
use JonnyW\PhantomJs\Client;
    $client = Client::getInstance();
    $request = $client->getMessageFactory()->createRequest('url', 'GET');
    $response = $client->getMessageFactory()->createResponse();
    $client->send($request, $response);
    echo $response->getContent();

Результат тот же.
Как получить страницу, которая в браузере?
  • Вопрос задан
  • 1502 просмотра
Решения вопроса 1
@rPman
Смиритесь, пол интернета уже javascript based.

Загружать страницы headless браузерами, компоненты браузера есть по до все известные языки програмирования и платформы, основанные либо на webkit (например у java webengine) либо на основе firefox (mono webbrowser) либо iexplore (.net - webbrowser).
p.s. php - https://github.com/chrome-php/headless-chromium-php

Страницу получать либо прямо из языка програмирования, запрашивая webengine.document.innerHTML или делать скрин картинки, либо инжектить javascript на страницу и работать с ней как вам заблагорассудится, в т.ч. эмулировать нажатие кнопок и вообще пользователя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@grinat
Есть сервисы на базе puppeteer, они сразу отдают html - https://github.com/GoogleChrome/rendertron демо https://render-tron.appspot.com/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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