2017-11-22 1 views
0

URLsの配列が返されています。どのように私は配列をループし、goto()関数を使用すると、それぞれのURLに行き、コードを実行して終了し、次のコードを実行しますか?Nightmare.jsでURLの配列をgoto()する方法

HERESに私のコード:

var Nightmare = require('nightmare'); 
var vo = require('vo'); 

vo(function*() { 
    var nightmare = Nightmare(); 
    var title = yield nightmare 
    .goto('https://www.example.com/l/los_angeles-california') 
    .inject('js', `node_modules/jquery/dist/jquery.js`) 
    .evaluate(function() { 
     var hrefs = []; 
     $('.ItemsListCard').find('a').each(function() { 
     hrefs.push($(this).attr('href')); 
     }); 

     return hrefs //array of urls 

     for (var i = 0; i < hrefs.length; i++) { 
     nightmare.goto(hrefs[i].href) 
      .wait(5000) 
      .click('.ItemListingActionButtons') 
      .type('.ThreadViewInput__input', 'Hey! ') 
      .click('.ThreadViewInput__send') 
     } 

    }); 
    console.log(title); 
    yield nightmare.end(); 

})(function(err, result) { 
    if (err) return console.log(err); 
}); 

答えて

0

メモnodejsのコントローラで実行しているブラウザのコンテキストで(.execute()を経由して)実行する悪夢を求めているコードの違い、およびコードがあります。あなたはここで正しいアイデアを持っていますが、hrefsを返した後で、それらを反復するコードの残りの部分はコントローラになければなりません:

const hrefs = yield nightmare 
    .goto('https://www.example.com/l/los_angeles-california') 
    .inject('js', `node_modules/jquery/dist/jquery.js`) 
    .evaluate(function() { 
     var hrefs = []; 
     $('.ItemsListCard').find('a').each(function() { 
     hrefs.push($(this).attr('href')); 
     }); 

     return hrefs; //array of urls 
    }); 
for (var i = 0; i < hrefs.length; i++) { 
    yield nightmare.goto(hrefs[i].href) 
    .wait(5000) 
    .click('.ItemListingActionButtons') 
    .type('.ThreadViewInput__input', 'Hey! ') 
    .click('.ThreadViewInput__send'); 
} 
関連する問題