Получить необработанный контент страницы с 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');
Другие вопросы по тегам