Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 骑士-点击多个按钮,然后抓取数据-如何?_Node.js_Web Scraping_Promise_Node Horseman - Fatal编程技术网

Node.js 骑士-点击多个按钮,然后抓取数据-如何?

Node.js 骑士-点击多个按钮,然后抓取数据-如何?,node.js,web-scraping,promise,node-horseman,Node.js,Web Scraping,Promise,Node Horseman,我想解析一个可以有任意数量按钮的网页。我想点击所有按钮,并从每次按下按钮中获取一些结果数据。我不知道怎么做。到目前为止,我的骑手代码: horse .on('resourceError', function(err) { console.dir(err); horse.close(); }) .userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0') .open('ht

我想解析一个可以有任意数量按钮的网页。我想点击所有按钮,并从每次按下按钮中获取一些结果数据。我不知道怎么做。到目前为止,我的骑手代码:

horse
 .on('resourceError', function(err) {
   console.dir(err);
   horse.close();
})
.userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0')
.open('https://www.example.com')
.click('#agree')
.click('input[class="button"]')
.waitForSelector('#address')
.type('#address', 'blah blah')
.click('#button-search-address')
.wait(3000)
.evaluate(function() {
  var btns=[];
  $('[data-agency-code]').each(function(i) {
    btns.push({dac: $(this).attr('data-agency-code')});
  });
  return btns;
})
.then(?????) 
所以我有BTN阵列中的所有机构代码。现在我需要遍历所有按钮,类似于以下伪代码:

var resData=[]; 
jQuery.each(btns, function(i, val) {
  ... 
  .click('[data-agency-code]'+val.dac)
  .waitForSelector('#data-agency-data')
  .grab data like:
     resData.push({email: $('#agency-email').val(), phone: $('#agency-phone').val()});
});      
无法找出执行此循环的horseman代码。Thx.

从Horseman Github页面的85期开始运行

下面是遍历页面上所有按钮的代码:

horse
  .on('resourceError', function(err) {
    console.dir(err);
    horse.close();
  })
  .userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0')
  .open('https://www.example.com')
  .click('#agree')
  .click('input[class="button"]')
  .waitForSelector('#address')
  .type('#address', 'blah blah')
  .click('#button-search-address')
  .wait(3000)
  .evaluate(function() {
    var btns=[];
    $('[data-agency-code]').each(function(i) {
      btns.push({dac: $(this).attr('data-agency-code')});
    });
    return btns;
  })
  .then(function(btns) {
    if (btns.length == 0)
      horse.close();
    console.log(btns);
    var chain = horse;
    for(var i=0; i < btns.length; i++) {
      chain = chain
        .click('[data-agency-code='+btns[i].dac+']')
        .wait(2000)
        .evaluate(function() {
           return {
             name: $('some selector').text().trim(),
             email: $('some selector').text(),
             www: $('some selector').text() 
           }
         })
         .then(function(aobj) {
           agya.push(aobj);
         })
    }
    return chain;
  })
  .then(function(chain) {
    console.log(agya);
  })
  .close();
马
.on('resourceError',函数(err){
console.dir(err);
马。关闭();
})
.userAgent('Mozilla/5.0(Windows NT 6.1;WOW64;rv:27.0)Gecko/20100101 Firefox/27.0')
.open('https://www.example.com')
。单击(“#同意”)
。单击('input[class=“button”]”)
.waitForSelector(“#地址”)
.type(“#地址”,“诸如此类”)
。单击(“#按钮搜索地址”)
.等等(3000)
.评估(功能){
var BTN=[];
$(“[数据机构代码]”)。每个(功能(i){
推送({dac:$(this.attr('data-agency-code'))});
});
返回基站;
})
.然后(功能(BTN){
如果(btns.length==0)
马。关闭();
控制台日志(BTN);
var链=马;
对于(变量i=0;i
现在我在agya阵列中有了所有的机构和信息