を(。Nightmare #625から私のオリジナルの答えを移植)
これは、あなたの質問に答えるために非常にナイーブ方法です:
var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare({
show: true
});
var run = function *() {
yield nightmare.goto('http://someInfiniteScrollPage.tld');
var previousHeight, currentHeight=0;
while(previousHeight !== currentHeight) {
previousHeight = currentHeight;
var currentHeight = yield nightmare.evaluate(function() {
return document.body.scrollHeight;
});
yield nightmare.scrollTo(currentHeight, 0)
.wait(3000);
}
yield nightmare.end();
};
vo(run)(function(err) {
console.dir(err);
console.log('done');
});
このアプローチには問題があります:あなたが行っているときgのページに対してactually is an infinite scroll、上記は決して終了しません。また、.wait()
コールは、スクロール要素のカウントが潜在的に待ち時間を短縮し、堅牢性を高めるために変化するのを待つことに置き換えることができる。それでも、これはあなたを始めるのに十分なはずです。
EDIT:あなたがあなたの代わりに増加し、高さを見ているのセレクタを使用するwhile
句を入れ替えることができ、セレクタについて尋ねました。腰からは、何かのように:1のために、あなたは必ずしも保証されないwhile
クエリを、満たすためにページに頼っている:
var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare({
show: true
});
var run = function *() {
yield nightmare.goto('http://someInfiniteScrollPage.tld');
while(document.querySelectorAll('.someClass').length > 0) {
var currentHeight = yield nightmare.evaluate(function() {
return document.body.scrollHeight;
});
yield nightmare.scrollTo(currentHeight, 0)
.wait(3000);
}
yield nightmare.end();
};
vo(run)(function(err) {
console.dir(err);
console.log('done');
});
このアプローチにはまだ問題があります。
私は何かが完全に欠けているに違いないように感じます - 'document'は実際にページの' document'オブジェクトを参照していますか?私はそれがそのようには機能しなかったという印象を受けました。私のコードで 'document'を参照しようとすると、"ドキュメントが定義されていません "というエラーが出ます。 ? – rinogo
また、これらの例のwhileループは非常に「きつく」ループしているように見えます(意図した3秒待機なし)。あれは正しいですか? NightmareJSへのすべてのコールは非同期です。 – rinogo
'while'ループに関して - 私はそれがジェネレータを使うことと関係があると思いますか?私は発電機newbです。それをもっと調べます。 – rinogo