CasperJS waitFor *()的行为非常不明确

时间:2016-03-21 10:42:22

标签: javascript jquery web-scraping phantomjs casperjs

我试图了解CasperJS如何在我的测试中使用它。我试图完成的是当它们准备好并完全加载时截取页面的某些元素的截图,我使用Whatsapp Web作为示例,因为它有我正在寻找的加载。

这是我的实施:

var casper = require('casper').create({
  remoteScripts:  [
    'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
    'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js'
  ],
  pageSettings: {
    userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.1500.71 Safari/537.36'
  },
  viewport: {
    width: 1280,
    height: 1024
  },
  waitTimeout: 60000,
  logLevel: 'debug',
  verbose: true
});

casper.start('https://web.whatsapp.com/', function(){
    this.echo('Starting...')
    this.waitForSelector('.qrcode', function() {
        this.captureSelector('whatsapp.png', 'html');
        this.echo('Screeshot Taken!')
    });
});

casper.run();

似乎CasperJS在60年代不会在页面中找到<div class="qrcode"></div>,这是相当长的时间。 我在这里失踪了什么?假设waitFor *()会做什么?

信息:PhantomJS v2.0.0

注意:我可以说,实际上看起来waitForSelector()看起来像异步一样,我想知道为什么必须像这样实现wait()函数,我期待的是像观察者这样的东西(或无限循环)将持续获取DOM并在一定时间内使用该选择器检查元素。

1 个答案:

答案 0 :(得分:0)

最后我明白了! 这是一个版本问题,只是避免使用brew来安装PhantomJSCasperJS

我所做的实际上是:

  • brew uninstall phantomjs && brew uninstall casperjs
  • npm i -g phantomjs && npm i -g casperjs

现在我的代码按预期工作了。 这个bug实际上与PhantomJS的v1.9.8有关,它会触发这个错误:

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/local/Cellar/casperjs/1.1-beta3/libexec/bin/bootstrap.js. Domains, protocols and ports must match.

如果您使用的是OSX,请使用npm重新安装,并且工作正常。 希望它会有所帮助。