我正在使用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);
});
如何让代码使用正确的加载事件?
答案 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);
}
});
(从上面链接的来源复制)
没关系,建议做同样的事情,而不是直接在事件中进行渲染。