我希望回显与我的选择器匹配的所有元素的id,但我对两个不同的'this'感到困惑。
要向casper回应一些东西我使用this.echo() 但是当我使用.each()时,请参考循环中的当前元素。 所以这不起作用
$('.market_listing_row').each(function(i){ this.echo( $( this ).attr('id') ) } )
,也没有
$('.market_listing_row').each(function(i){ casper.echo( $( this ).attr('id') ) } )
由于没有输出错误,因此casper似乎没有收到.echo()
的命令。
我该如何处理这个this.
?
更多背景信息:
...
casper.waitForSelector('#result_0', function() {
this.click('#result_0');
});
casper.then(function() {
var listing = [];
$('.market_listing_row').each(function(i){ listing.push({id: $( this ).attr('id') }) } )
for (var i=0; i<listing.length; i++){
for( var k in listing[i]){
this.echo(k + ': ' + listing[i].k);
}
this.echo('\n');
}
});
casper.run();
我有一组各种商品的div行,并希望为每个商品制作一个js对象数组:[{id: id, price: price}]
现在我只想提取ID。
答案 0 :(得分:0)
检查此示例:
var links = [];
var casper = require('casper').create();
function getLinks() {
var links = document.querySelectorAll('h3.r a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}
casper.start('http://google.fr/', function() {
// search for 'casperjs' from google form
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});
casper.then(function() {
// aggregate results for the 'casperjs' search
links = this.evaluate(getLinks);
// now search for 'phantomjs' by filling the form again
this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});
casper.then(function() {
// aggregate results for the 'phantomjs' search
links = links.concat(this.evaluate(getLinks));
});
casper.run(function() {
// echo results in some pretty fashion
this.echo(links.length + ' links found:');
this.echo(' - ' + links.join('\n - ')).exit();
});