2013-07-11 55 views
0

我正在寫一個小腳本來查詢電子商務網站上的一些廣告。我的代碼是這樣的如何正確使用CasperJS中的casper.each

var keywords = ['fender', 'yamaha']; 
    var casper = require('casper').create(), 
     url = 'http://www.somecommercesite.com'; 

    casper.start(url, function() { 
     casper.each(keywords, function (self, word) { 
      casper.echo("Getting entries for keyword " + word + ".."); 

      casper.fill('form#frmsearch', { 
       'q': word 
      }, true); 

      casper.then(function() { 
       casper.echo("KEYWORD SHOULD BE: " + word); 

       var actualKeyword = casper.evaluate(function() { 
        return "ACTUAL KEYWORD: " + document.getElementsByTagName('strong')[0].innerText; 
       }); 
       casper.echo(actualKeyword); 

       var result = casper.evaluate(function() { 
        var entry = document.getElementsByClassName("listing")[0]; 
        return entry.innerText; 
       }); 
       casper.echo(result); 
      }); 
     }); 
    }); 

    casper.run(); 

但是,我得到了不正確的結果。輸出是

Getting entries for keyword fender..  
Getting entries for keyword yamaha..  
KEYWORD SHOULD BE: fender  
ACTUAL KEYWORD: fender  
// entries for fender 

KEYWORD SHOULD BE: yamaha 
ACTUAL KEYWORD: fender  
// entries for fender 

所以,我得到了擋泥板條目兩次,從來沒有雅馬哈。這些代碼有什麼問題?

回答

0

我找到了答案。我需要用casper.then()來包圍casper.fill()。