2017-10-11 80 views
0

我想解析一個可以有任意數量的按鈕的網頁。我想單擊所有按鈕,並從每個按鈕中獲取一些結果數據。我不知道如何做到這一點。我的馬人代碼,到目前爲止:輕騎兵 - 點擊多個按鈕然後抓取數據 - 如何?

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(?????) 

所以我有所有機構代碼在btns數組中。現在,我需要去通所有按鈕排序像這樣的僞代碼:

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

想不通時的騎手代碼來完成這個循環。謝謝。

回答

1

從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(); 

現在我有agya陣列中的所有機構和信息。

相關問題