Получить необработанный контент страницы с PhantomJS
Можно ли получить необработанный HTML-код с веб-страницы, используя PhantomJS, перед выполнением любого javascript.
Следующий скрипт возвращает HTML после того, как все скрипты загружены и выполнены.
var webPage = require('webpage');
var page = webPage.create();
page.open('http://stackru.com', function (status) {
var content = page.content;
console.log('Content: ' + content);
phantom.exit();
});
Есть ли способ получить доступ также к первоисточнику страницы?
2 ответа
DOMContentLoaded - самое раннее событие, которое запускается при загрузке страницы, но в вашем случае кажется, что уже слишком поздно, потому что JavaScript может быть выполнен до того, как DOMContentLoaded запущен (подумайте <script>doSomething();</script>
).
Следующей идеей будет запустить setInterval(check, 5);
где check
пытается определить, полностью ли загружен исходный HTML, но это не гарантирует, что другой JavaScript уже не был запущен, и невозможно определить, загружена ли страница, потому что page.content
всегда включает </body></html>
,
Очевидное решение - полностью отключить JavaScript page.settings.javascriptEnabled = false;
, но если вы сделаете это, вы больше не сможете получить доступ к DOM. Единственный способ получить доступ к нему, будет через page.content
или аналогичные свойства.
Если вам нужен только исходный код страницы, не используйте PhantomJS для этого. Есть много решений для этого, таких как cURL.
Это можно сделать через page.plainText:
var page=require('webpage').create();
page.onLoadFinished=function(status) {
if(status=='success') {
console.log(page.plainText);
}
}
page.load('http://stackru.com');