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要素の適切なリストではありません。これを回避する方法はありますか?理想的には、スクリプトはリストから複数の要素を見つけ出し、それぞれを選択し、ページ上でより多くのコードを実行して(おそらく多くのオプションを選択して)結果を評価することができます。