2017-06-01 403 views
0

我想循環遍歷每個li>,然後將它們添加到數組中。我應該如何去創建一個for循環來返回每個li並將它們放入數組中。在循環中獲取李是我卡住的地方。如何使用javascript在ul中循環播放li

var Nightmare = require('nightmare'); 
var nightmare = Nightmare({ show: false }) 

nightmare 
    .goto('https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux') 

    .wait(500) 
    .evaluate(function() { 
    var ht = document.querySelector('#toc > ul > li.toclevel-1.tocsection-5 > ul 
    ').innerText; 
    return ht; 
    }) 
    .end() 
    .then(function (result) { 
    console.log(result) 
    }) 
    .catch(function (error) { 
    console.error('Search failed:', error); 
    }); 

輸出:

PS C:\scrapping> node .\2.js 
5.1  RHEL 2.1 
5.2  RHEL 3 
5.3  RHEL 4 
5.4  RHEL 5 
5.5  RHEL 6 
5.6  RHEL 7 

PS C:\scrapping> 

回答

0

問題是,當您期望then()中的結果時,會調用nightmare.ipc下方的結果,並且它會嘗試對其進行stringify/destringify以將其發送到您的應用程序。 HTML元素(由document.querySelectorAll()返回)可能會失敗,以字符串化和這樣的錯誤可以browserWindow

的開發者控制檯中可以看出您可以輕鬆地做到這一點:

const Nightmare = require('nightmare'); 
const nightmare = Nightmare({ 
    show: true, 
    openDevTools: true, 
}); 

nightmare 
    .goto('https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux') 
    .evaluate(function(selector) { 
    var links = document.querySelectorAll(selector); 
    var passed = []; 
    for(var ii=0; ii<links.length; ii++) { 
     passed.push(links[ii].textContent); 
    } 
    return passed; 
    }, '#toc > ul > li.toclevel-1.tocsection-5 > ul > li') 
    .then(function(result) { 
    console.log(result); // Outputs length. 
    }) 
    .catch(function(error) { 
    console.error('Failed', error); 
    }); 

    //Output 
    [ '5.1 RHEL 2.1', 
    '5.2 RHEL 3', 
    '5.3 RHEL 4', 
    '5.4 RHEL 5', 
    '5.5 RHEL 6', 
    '5.6 RHEL 7' ] 
0

您可以通過調整原有的功能使用children屬性而不是innerText財產得到所有<li>組成的數組。

例如:

function() { 
    var ht = document.querySelector('#toc > ul > li.toclevel-1.tocsection-5 > ul 
    ').children; 
    return ht; 
} 

這將返回所有<ul>的孩子元素的陣列。

+0

感謝回答。 如果我這樣做,我得到這個: ''$ node stackOverflow.js {'0':{},'1':{},'2':{},'3':{},'4 ':{},'5':{}}'' 像空數組一樣。 –

+0

這不會工作,由於我的回答 – devilpreet

+0

@devilpreet中提到的原因謝謝!正是我想要的。 –