2017-05-11 1 views
0

javascriptでナイトメアを使用してWebスクレーパーを作成していますが、評価関数が正しい情報を返さない。それは、 "querySelectorAll"からの要素のリストではなく、プリミティブ型(int、文字列など)を返すことができるようです。ナイトメアが評価から正しい値を返さない

var Nightmare = require('nightmare'); // make a new nightmare 
var nightmare = Nightmare({ show: true }); // display it (change to false for text only) 





nightmare 
.goto('http://stackoverflow.com/questions') // go to stack overflow 

.evaluate(function() { 
    var all_options = document.querySelectorAll(".summarycount"); 
    return all_options[0].innerHTML; 

}) 
// .end() 
.then(function (result) { 
    console.log(result); 
}) 
.catch(function (error) { 
    console.error('Search failed:', error); 
}); 

そして、「13844183」または何でも質問の現在の数があるを出力:次のコードは正常に動作します。私はそうのように評価して、機能を変更し、評価関数からのすべてのオプションを返すようにしようとすると、しかし:

.evaluate(function() { 
    var all_options = document.querySelectorAll(".summarycount"); 
    return all_options; 

}) 
// .end() 
.then(function (result) { 
    console.log(result[0].innerHTML); 
}) 

をそれはちょうど未定義印刷します。したがって、evaluate関数が返す値は、一致するすべてのDOM要素の適切なリストではありません。これを回避する方法はありますか?理想的には、スクリプトはリストから複数の要素を見つけ出し、それぞれを選択し、ページ上でより多くのコードを実行して(おそらく多くのオプションを選択して)結果を評価することができます。

答えて

0

評価では、評価がプリミティブ型を返さなければならないという問題がありました。私は、評価関数内のデータのクリックと処理のすべてを処理するだけで、問題の一部を修正しました。

関連する問題