使用PhantomJS获取原始页面内容

时间:2015-09-02 05:27:17

标签: javascript phantomjs view-source

在执行任何javascript之前,是否可以使用PhantomJS从网页获取原始html。

以下脚本在加载并执行所有脚本后返回html。

var webPage = require('webpage');
var page = webPage.create();

page.open('http://stackoverflow.com', function (status) {
    var content = page.content;
    console.log('Content: ' + content);
    phantom.exit();
});

是否有办法访问页面的初始来源?

2 个答案:

答案 0 :(得分:3)

DOMContentLoaded是加载页面时触发的最早事件,但在您的情况下似乎已经太晚了,因为JavaScript可以在触发DOMContentLoaded之前执行(想想<script>doSomething();</script>)。

下一个想法是运行setInterval(check, 5);,其中check尝试确定初始HTML是否已完全加载,但这并不能保证没有其他JavaScript已经运行且无法检测到是否已加载页面,因为page.content始终包含</body></html>

显而易见的解决方案是使用page.settings.javascriptEnabled = false;完全禁用JavaScript,但如果这样做,您将无法再访问DOM。访问它的唯一方法是通过page.content或类似的属性。

如果您只需要页面源,请不要使用PhantomJS。有许多解决方案,例如cURL。

答案 1 :(得分:0)

可以通过 page.plainText

完成
var page=require('webpage').create();
page.onLoadFinished=function(status) {
    if(status=='success') {
        console.log(page.plainText);
    }
}
page.load('http://stackoverflow.com');