1

在执行任何 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();
});

有没有办法访问页面的初始源?

4

2 回答 2

3

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

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

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

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

于 2015-09-02T07:19:45.160 回答
0

可以通过page.plainText完成:

var page=require('webpage').create();
page.onLoadFinished=function(status) {
    if(status=='success') {
        console.log(page.plainText);
    }
}
page.load('http://stackoverflow.com');
于 2015-12-16T12:33:29.263 回答