2016-09-15 14 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の内部でのみ使用可能ないくつかのページプロパティを使用するため、エラーをスローしてスクリプトを停止します。