【问题标题】:CasperJS waitFor*() has very unclear behaviourCasperJS waitFor*() 的行为非常不清楚
【发布时间】:2016-03-21 10:42:22
【问题描述】:

我正在尝试了解 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 并使用该选择器检查元素。

【问题讨论】:

  • 您使用哪个 PhantomJS 版本?请注册resource.errorpage.errorremote.messagecasper.page.onResourceTimeout 活动 (Example)。也许有错误。众所周知,PhantomJS 2.x 会隐藏一些错误,因此您也应该尝试 1.9.8。
  • 您的代码看起来不错。您是否在稍等片刻以查看页面是否至少加载后截取了屏幕截图?为什么要加载远程脚本?这么老的 jQuery 版本可能是罪魁祸首。
  • 感谢您的回答@ArtjomB。我很坚持这个。我将使用您要求的信息升级我的问题,我尝试降级到 1.9.8,我正在加载远程脚本只是因为它更快,修复它,如果它解决,我会告诉你。
  • @ArtjomB。你是对的,有一个隐藏的错误,undefined is not a function (evaluating 'r.bind(this)')

标签: javascript jquery web-scraping phantomjs casperjs


【解决方案1】:

我终于明白了! 这是一个版本问题,只是避免使用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 重新安装,并且可以正常工作。 希望它会有所帮助。

【讨论】:

  • 现在可以获取二维码了吗?面对 missing=cryptoSha256,cryptoAesCbc
  • @snofty 我实际上不知道是否有什么变化,在我测试的时候是的:github.com/nerder/whosup/blob/master/whosapp.js 这是最终的代码(对不起,质量只是 4fun)
猜你喜欢
  • 2020-04-05
  • 2012-03-16
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多