我们正在尝试为最终产品页面的以下网站生成屏幕截图,但由于网站上的JavaScript错误而在控制台中收到错误消息,并且无法生成超过1个屏幕截图。
链接:http://shop.reebok.com/us/product/Men-DMXSky-Impact-Shoes/NV326?cid=V61752
记录:
代码[没有错误处理]:
var page = require('webpage').create();
page.open('http://shop.reebok.com/us/product/Men-DMXSky-Impact-Shoes/NV326?cid=V61752', function () {
window.setTimeout(function () {
page.render('output.jpg');
phantom.exit();
});
});
记录错误消息并且不生成屏幕截图。
代码[使用错误处理]:
var page = require('webpage').create();
page.onError = function(msg, trace) {
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msgStack.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
});
}
//console.error(msgStack.join('\n'));
};
page.open('http://shop.reebok.com/us/product/Men-DMXSky-Impact-Shoes/NV326?cid=V61752', function () {
window.setTimeout(function () {
page.render('output.jpg');
phantom.exit();
});
});
这不会在控制台中记录错误消息,但仍未创建屏幕截图。
参考来自: http://phantomjs.org/api/webpage/handler/on-error.html
答案 0 :(得分:0)
有关屏幕截图的许多问题都是因为在渲染页面时过早地调用了page.render。一旦调用回调,它建议再等一会儿。
使用setTimeout时,请提供这样的持续时间
page.open('http://shop.reebok.com/us/product/Men-DMXSky-Impact-Shoes/NV326?cid=V61752', function () {
window.setTimeout(function () {
page.render('output.jpg');
phantom.exit();
}, 1000);
});
另一方面,你是真的:页面上的js错误可能会阻止捕获正常工作;因此,您必须向page.onerror
或phantom.onerror
添加错误处理程序。