噩梦如何循环选择选择器

时间:2016-11-21 08:57:54

标签: loops web-scraping nightmare

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
var fs  = require('fs');
var result;
nightmare
        .goto('http://football-system.jp/fss/pub_penaltylist.php?lid=eBVesRz5C54=')
        .wait('select[name="selectTeam"]')
        .evaluate(function () {
         var options = document.querySelectorAll('option'),i;
         var values =[]
         for (i = 1; i < options.length; ++i) {
            values.push(options[i].value)
            }     
            return values;
        })
  .then(function (values) {
    console.log(values)
    values.reduce(function(accumulator, value) {
  return accumulator.then(function(results) {
    return nightmare.goto("http://football-system.jp/fss/pub_penaltylist.php?lid=eBVesRz5C54=")
      .wait('select[name="selectTeam"]')
      .select('select[name="selectTeam"]', value)
      .wait('button[onClick="selectData();"]')
      .click('button[onClick="selectData();"]')
      .wait('table[class="tableOutputDate"]')
      .evaluate(function () {
          return document.querySelector('table[class="tableOutputDate"]').textContent;
        })
      .then(function(result){
        console.log(result)
        results.push(result);
        return results;
      });
  });
}, Promise.resolve([])).then(function(results){

console.log(results)

});


  })
  .catch(function (error) {
    console.error('Search failed:', error);
  });

这是我的代码。我想循环选择该页面中的所有选择器并获取所有html数据。我在这里问了一个问题,如何在噩梦中循环,但结果无法解决这个问题。请帮助我。谢谢。

1 个答案:

答案 0 :(得分:1)

我解决了我的问题。问题发生在交易时间,而不是在循环逻辑中。我再添加一些等待(时间)。我认为等待(时间)比等待(选择器)更好。所以结束了。谢谢你的关注。

var run = function * () {
  //var values = ['http://www.yahoo.com', 'http://example.com', 'http://w3c.org'];
  var titles = [];
  for (var i = 0; i < values.length; i++) {
    var title = yield nightmare.goto('.............')
      //.wait('select[name="selectTeam"]')
      .wait(2000)
        .select('select[name="selectTeam"]', values[i])
        .wait(2000)
        .click('button[onClick="selectData();"]')
        //.wait('table[class="tableOutputDate"]')
        .wait(2000)
        .evaluate(function () {
          //return document.querySelector('table[class="tableOutputDate"]').textContent;
          var divs = document.querySelectorAll('table[class="tableOutputDate"]'),i;
        var tables = []
        for (i = 0; i < divs.length; ++i) {
            tables.push(divs[i].textContent)
            //result += divs[i].href.toString()+"\n";
            }
        return tables;
        })
    titles.push(title);
  }
  return titles;
}

vo(run)(function(err, titles) {
  console.dir(titles);
});