web scrapy by nightmare 关于循环,每次输出都不一样

web scrapy by nightmare about loop ,output is not same every time

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
var fs  = require('fs');
vo = require('vo');
var result;
nightmare
    .goto('http://jufa-kyusyu.jp/teams/')
    .wait(1000)
    .evaluate(function () {
     var options = document.querySelectorAll('option'),i;
     var values =[]
     for (i = 0; i < options.length; ++i) {
        values.push(options[i].value)
        }
        return values;
    })
    .then(function (values) {
      for (var i = 0; i < values.length; i++) {
        if(values[i] == "#") values[i] = "/teams/181.html";
    nightmare
      .goto("http://www.jufa-kyusyu.jp"+values[i])
      .evaluate(function () {
      var abc =     document.querySelector('iframe[class="autoHeight"]').src.toString()
      return abc;
    }) 
      .then(function (result) {
console.log(result)
  })
    .catch(function (error) {
    console.error('Search failed:', error);
  });} 
  })
  .catch(function (error) {
    console.error('Search failed:', error);
  });

我想通过 nightmarejs 抓取网络信息 looply.I 不知道为什么有两个结果 link 是相同的,结果在 运行 中每 time.thank 你.

使用 Nightmare 在循环中处理异步调用时必须小心

检查this answer and this关于这个概念的详细解释。

主要思想可以用这句话来概括:

Executing the operations in series requires arranging them to execute in sequential order

文档显示了如何实现 using plain, vanilla js and also with vo

先睹为快,了解如何使用普通 Javascript 解决此循环问题:

var urls = ['http://example1.com', 'http://example2.com', 'http://example3.com'];
urls.reduce(function(accumulator, url) {
  return accumulator.then(function(results) {
    return nightmare.goto(url)
      .wait('body')
      .title()
      .then(function(result){
        results.push(result);
        return results;
      });
  });
}, Promise.resolve([])).then(function(results){
    console.dir(results);
});

基本上您需要做的是将所有呼叫排入列表并使用 Promise.resolve

触发它们