由于Phantomjs中的javascript日志无法制作屏幕截图?

时间:2014-03-22 12:17:39

标签: javascript phantomjs

我们正在尝试为最终产品页面的以下网站生成屏幕截图,但由于网站上的JavaScript错误而在控制台中收到错误消息,并且无法生成超过1个屏幕截图。

链接:http://shop.reebok.com/us/product/Men-DMXSky-Impact-Shoes/NV326?cid=V61752

记录: enter image description here

代码[没有错误处理]:

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

1 个答案:

答案 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.onerrorphantom.onerror添加错误处理程序。