PhantomJS onLoadFinished无法正常工作

时间:2017-02-27 13:14:54

标签: javascript phantomjs

我正在使用PhantomJS 2.1.1拍摄移动屏幕截图,但其中一些屏幕截图不正确,因为页面未完全呈现。我曾尝试使用onLoadFinished事件,但它无效。

这是我的代码:

var system = require('system');
var args = system.args;

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

page.open(args[1]);

page.onLoadFinished = function (status) {

    page.viewportSize = { width: 414, height: 736 };

    page.clipRect = { top: 0, left: 0, width: 414, height: 736 };
    page.render(args[2]);
    console.log(args[2]);
    phantom.exit();

});

它只是挂起而且没有回来。我通过使用2秒硬编码延迟解决了这个问题,但这并不好,因为我不知道每个站点都会在2秒内加载。

这是硬编码延迟我使用:

page.open(args[1], function () {

    page.viewportSize = { width: 414, height: 736 };

    page.clipRect = { top: 0, left: 0, width: 414, height: 736 };

    setTimeout(function () {
        page.render(args[2]);
        console.log(args[2]);
        phantom.exit();
    }, 2000);

});

如何让代码使用正确的加载事件?

1 个答案:

答案 0 :(得分:0)

官方PhantomJS rasterize.js脚本用于截取网页uses a 200ms timeout的屏幕截图:

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit(1);
    } else {
        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 200);
    }
});

(从上面链接的来源复制)

没关系,建议做同样的事情,而不是直接在事件中进行渲染。