CasperJS - 无法使用弹出功能捕获完整的网站截图

CasperJS - Cannot capture complete website screenshoot in withPopup function

我是 CasperJS 的新手。

当我使用 withPopup 时,弹出窗口中的页面似乎没有完全加载...

var casper = require('casper').create({
    verbose: true,
})

casper.start('https://www.w3schools.com/js/js_examples.asp').then(function(){
    this.capture('try1.png');
    this.click('#main p a');
})

casper.waitForPopup(0, function() {
    this.capture('try2.png');

}, null, 20000);

casper.withPopup(0, function() {
    this.waitForSelector('body', function(){
        this.capture('try3.png');
    })
});

casper.run(function() {
    casper.echo('Done.').exit();
});

我认为您的问题与 withPopup 无关,而与 click 有关。由于某些原因,浏览器自动化库(如 CasperJS)并不总是能正确处理点击。如果我是你,我会尝试找到解决方法。使用简单的 thenOpen,弹出窗口被正确加载...

var casper = require('casper').create({
  viewportSize: {
    width: 1366,
    height: 768
  }
});

casper.start('https://www.w3schools.com/js/js_examples.asp', function () {
  this.capture('try1.png');
});

casper.thenOpen('https://www.w3schools.com/js/tryit.asp?filename=tryjs_intro_inner_html', function () {
  this.capture('try2.png');
});

casper.run(function () {
  casper.echo('Done.').exit();
});

最后发现截图并非不完整,在使用withPopup函数时,它的view size变了。所以只需在 withPopup 函数中添加 this.viewport(1600,1000) ,屏幕截图就可以正常显示了。