phantomjs:如何等待“完整”页面加载?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (559)

我在用PhantomJSv1.4.1加载一些网页。我不能访问他们的服务器端,我只是得到指向他们的链接。我使用过时的幻影版本,因为我需要在网页上支持AdobeFlash。

问题是许多网站正在加载它们的次要内容异步,这就是为什么onLoadFined回调(在HTML中类似于onLoad)在还没有全部加载的情况下过早启动的原因。谁能建议我如何等待一个网页的满负荷,例如,截图与所有动态内容,如广告?

提问于
用户回答回答于

var page = require("webpage").create(),
    url = "http://example.com/index.html";

function onPageReady() {
    var htmlContent = page.evaluate(function () {
        return document.documentElement.outerHTML;
    });

    console.log(htmlContent);

    phantom.exit();
}

page.open(url, function (status) {
    function checkReadyState() {
        setTimeout(function () {
            var readyState = page.evaluate(function () {
                return document.readyState;
            });

            if ("complete" === readyState) {
                onPageReady();
            } else {
                checkReadyState();
            }
        });
    }

    checkReadyState();
});

用户回答回答于

另一种方法是让PhantomJS在页面加载后再按照常规方法在执行呈现之前等待一段时间。rasterize.js示例,但是有更长的超时时间,以便JavaScript能够完成额外的资源加载:

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 1000); // Change timeout as required to allow sufficient time 
    }
});

扫码关注云+社区