2016-09-15 98 views
0

如何將參數傳遞給CasperJS的評估函數?將參數傳遞給CasperJS的評估函數

//Should be logged in at this point 
    casper.then(function() { 
     var counter = 0; 
     var cap = 500; 

     this.evaluate(function(counter) { 
      var children = $('.companies-using-service').children(); 

      while (counter < children.length) { 
       child = children[counter]; 
       console.log($(child).find('a').attr('data-hint')); 
       counter++; 
      } 
     }, counter); 
    }); 
}; 

var scrapeClients = function(counter) { 
    var children = $('.companies-using-service').children(); 

    while (counter < children.length) { 
     child = children[counter]; 
     console.log($(child).find('a').attr('data-hint')); 
     counter++; 
    } 
} 

上面,我能夠使用unamed函數傳遞參數。但是,我希望將函數scrapeClients傳遞給評估函數。在這種情況下,我嘗試了以下this.evaluate(scrapeClients(counter), counter)。但是,這不起作用,錯誤說它找不到$變量。

回答

0

功能是JavaScript中的一等公民。你可以像變量一樣對待它們。你可以通過它們。這意味着,你不想

this.evaluate(scrapeClients(counter), counter) 

而是

this.evaluate(scrapeClients, counter) 

在第一種情況下,你實際上是直接調用該函數。由於函數使用僅在casper.evaluate內部可用的某些頁面屬性,因此會引發錯誤並停止腳本。