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. Проверьте соединение и повторите попытку".