【发布时间】: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.error、page.error、remote.message和casper.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