如何使用Nightmare.js JavaScript转到()一组URL

时间:2017-11-22 01:57:26

标签: javascript arrays nightmare

我收到了URLs的数组。如何遍历数组并使用 goto()函数转到每个网址并执行代码然后关闭并执行下一个?

继承我的代码:

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);
});

1 个答案:

答案 0 :(得分:0)

请注意,您要求Nightmare在浏览器上下文中执行的代码(通过.execute())与您在nodejs中的控制器中运行的代码之间存在差异。你在这里有正确的想法,但在返回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');
}