2017-03-04 2 views
1

私は悪夢を学んでいます。ウェブサイトにアクセスしてログインし、ボタンを繰り返しクリックすると、ボタンがなくなるまでさらにデータが表示されます。私はイラストのために偽の口座を作った。ナイトメアのループイベントをクリック

初めてログインしてボタンをクリックすると成功しましたが、もう一度クリックしようとすると、 '.more-checkins'要素が見つからないというエラーが記録されます。

最終的には、このコードをクリックして...をクリックしてもう一度クリックするように指示するのではなく、ループ内に置くことをお勧めします。それも非常に高く評価される設計を助ける。

const Nightmare = require('nightmare') 
const untappdURL = 'https://untappd.com/user/beerFan2017' 


Nightmare({ 
    show: true, 
    openDevTools: true, 
    waitTimeout: 90000000 // increase the default timeout to test things 
}) 
    .goto(untappdURL) 
    .click('.more_checkins') 
    .type('#username', 'beerFan2017') 
    .type('#password', 'Testing2017') 
    .click('input[type="submit"]') 
    .wait('.stats') 
    .click('.more_checkins') 
    .evaluate(function() { 
     return console.log('Begin waiting'); 
    }) 
    .wait(5000) 
    .evaluate(function() { 
     return console.log('Waiting end'); 
    }) 
    .click('more_checkins') 
    .then(result => console.log(result)) 
    .catch(error => console.error(error)) 

答えて

0

二部構成の答え:一つは、nightmare-examplesasynchronous operations and loopsを読みに行きます。それは、約束をもって反復の背景を得るのに役立ちます。

2つ、ナイトメアレポにも同様の問題があります - #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'); 
}); 

うまくいけば、十分にあなたを与える開始します。

関連する問題