2016-10-18 6 views
1

У меня есть этот скриптКак создать простой цикл в CasperJS к петле через различные действия на странице

var i=0; 
casper.start('http://www.example.com'); 
casper.then(function() {  
    this.sendKeys('#search_field', i); 
    this.click('input.vtop') 
}); 

casper.then(function() { 
    description = this.fetchText('h2').trim(); 
    description_longue = this.fetchText('#parent-longtext-body').trim(); 
    price = this.fetchText("td.nowrap strong").trim(); 
})  

casper.then(function() { 
    this.capture('site'+'i'+'.png'); 
}); 

casper.viewport(1024, 768); 
casper.run(); 

Я хочу, чтобы петли I от 0 до 5. Как я могу это сделать? простой for(i=0;i<5;<++) не работает!

+0

Простая петля прекрасно работает в CasperJS. Это важно только для того, чего вы хотите достичь. –

ответ

1

С each утверждением:

casper.start().each(links, function(self, link) { 
    self.thenOpen(link, function() { 
     this.echo(this.getTitle()); 
    }) 
}) 

или repeat

casper.start().repeat(5, function() { 
    this.echo("Badger"); 
}) 
1

петля отлично работает. Вам просто нужно иметь в виду, что все функции then* и wait* (а также несколько других) являются асинхронными. Вы можете использовать IIFE привязать переменную итерации к некоторой итерации:

casper.start(); 
casper.viewport(1024, 768); 

for(var i = 0; i < 5; i++){ 
    (function(i){ 
     casper.thenOpen('http://www.example.com'); 
     casper.then(function() {  
      this.sendKeys('#search_field', i); 
      this.click('input.vtop') 
     }); 

     casper.then(function() { 
      description = this.fetchText('h2').trim(); 
      description_longue = this.fetchText('#parent-longtext-body').trim(); 
      price = this.fetchText("td.nowrap strong").trim(); 
     })  

     casper.then(function() { 
      this.capture('site'+'i'+'.png'); 
     }); 
    })(i); 
} 

casper.run(); 

Смотрите это для получения дополнительной информации: JavaScript closure inside loops – simple practical example

Также casper.start и casper.run может появиться только один раз в скрипте.

0

Вам просто нужно поместить все ваши шаги в функцию, которая принимает параметр i в качестве параметра. Вы можете иметь проблемы, захватив слишком рано, так что здесь просто Exemple добавление .wait, надеюсь, что это помогает :-)

casper.then(function() { 
for (i=0; i<6; i++) { 
    this.wait(1000, (function(j) { 
     return function() { 
      this.sendKeys('#YourId', 'number'+ j , {reset: true}); 
      this.capture("image"+j+".jpg"); 
     }; 
    })(i)); 
} 

});