curl: Как исправить "Пожалуйста, включите JavaScript и перезагрузите страницу"

-1 alper [2018-01-22 21:30:00]

Когда я использую curl для извлечения html-страницы, я сталкиваюсь со следующим сообщением:

Please turn JavaScript on and reload the page.

Я не уверен, как справиться с этим, поэтому я могу открыть ту же страницу в своем веб-браузере.

[Q] Как я могу исправить это, чтобы получить информацию html-страницы только с помощью терминала?

$ curl http://bsod.pw/

<html>
  <head>
     <script src="https://www.google.com/recaptcha/api.js" async defer></script>
     <script>
       function onSubmit(token) {
         document.getElementById("recaptcha-form").submit();
       }
     </script>
  </head>
  <body>
<div id="recaptcha-loading" style="margin: 0px; padding: 0px; position: fixed; right: 0px; top: 0px; width: 100%; height: 100%;  z-index: 30001; opacity: 0.8;">
<p style="position: absolute; color: White; top: 30%; left: 40%;">
<img src="https://250410.selcdn.ru/antiddos/lg.rotating-balls-spinner.gif">
</p>
</div>
  <center><noscript><h1 style="text-align:center;color:red;"><strong>Please turn JavaScript on and reload the page.</strong></h1></noscript>
    <form id='recaptcha-form' action="/captcha" method="POST">
      <button id='submitbutton' style="visibility:hidden;" class="g-recaptcha" data-badge=bottomright data-sitekey="6LcigjgUAAAAACyu9edrmWKmIce8h0kIFQz7iyRo" data-callback='onSubmit'></button>
        <script>
        window.onload = function(){
        document.getElementById('submitbutton').click();
                }
        </script>
      <br/>
    </form>
    </center>
  </body>
</html>

Если вы inspect element на сайте (http://bsod.pw/), вы можете увидеть этот более подробный html-код.

Спасибо за ваше драгоценное время и помощь.

javascript html curl


2 ответа


5 Решение Andrey Tyukin [2018-01-22 21:36:00]

Нет "ошибки". Вы делаете запрос GET с помощью curl. Он возвращает вам HTML. В HTML, как правило, содержатся ссылки на код JavaScript, который ваш браузер должен загружать и выполнять. Ваш браузер (с активированным JS) может загружать сценарии .js и запускать их. Эти сценарии создадут некоторую опрятную веб-страницу. Если вы не загружаете связанные скрипты и не выполняете их, то вы не получите большую часть страницы. Подумайте об использовании правильного браузера без браузера (см. Пример ниже).

Вот небольшой пример, который должен продемонстрировать суть:

<!DOCTYPE html>
<html>
  <head>
    <title>Source code empty, page full!</title>
  </head>
  <body>
    <div id="fillThis">
      <p>Almost nothing there in the source code!</p>
      <p>... but inspect this div after JS is executed.</p>
    </div>
    <script>
      var fillThis = document.getElementById("fillThis");
      for (i = 0; i<1000; i++) {
        var child = document.createElement('p');
        child.innerHTML = "tons of content " + i;
        fillThis.appendChild(child);
      }
    </script>
  </body>
</html>    

Просто сохраните это как "something.html" и откройте его в браузере. Когда вы попросите браузер показать источник страницы, это именно то, что вы получите. Однако, когда вы проверяете div, щелкнув правой кнопкой мыши на нем, он покажет, что к нему добавлено> 1000 дочерних элементов. Они генерируются JS в вашем браузере, они не поступают с сервера в виде HTML.

редактировать

Я попытался получить доступ к странице с помощью PhantomJS, она почти сработала. Вот что я сделал:

#!/bin/bash

cat <<HereDoc > /tmp/phantomjsScript.js
  var page = require('webpage').create();
  page.open('http://example.com', function(status) {
    if(status === "success") {
      console.log(page.frameContent);
    }
    phantom.exit();
  });
HereDoc

phantomjs /tmp/phantomjsScript.js

Это скрипт bash, который генерирует вспомогательный скрипт в /tmp, который затем выполняется phantomjs. PhantomJS загружает веб-сайт, а также выполняет JavaScript. К сожалению, веб-сайт, на котором вы связаны, защищен механизмом "captcha" и не доступен напрямую, поэтому приведенный выше пример использует example.com. Если вы можете каким-то образом обойти капчу, вы, вероятно, можете использовать похожий скрипт для загрузки HTML, запуска JS, а затем сбрасывать визуализированную DOM на консоль.


-1 Mukesh [2018-01-22 21:47:00]

Попробуйте запустить код на хром. Фактически ошибка связана с подключением captcha, и в сообщении "Не удается связаться с reCAPTCHA. Проверьте соединение и повторите попытку".