0

Ich möchte über jedes li> in ul> Schleife und später fügen Sie sie in ein Array. Wie soll ich eine for-Schleife erstellen, um jedes li zurückzugeben und in ein Array zu setzen? Die Li in einer Schleife zu bekommen ist, wo ich stecken geblieben bin.Wie Schleife über Li in ul mit Javascript

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

Ausgang:

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> 

Antwort

0

Das Problem ist, dass, wenn Sie das Ergebnis in then() erwartet, unter Alptraum.ipc aufgerufen wird und es versucht, stringify/destringify, um es an Ihre Anwendung zu senden. HTMLElements (zurückgegeben durch document.querySelectorAll()) wird wahrscheinlich nicht stringify und solche Fehler in Entwicklerkonsole von Browserfenster

Sie werden kann, kann dies leicht tun sehen:

für die Beantwortung
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

Sie können ein Array aller <li> s erhalten, indem Sie Ihre ursprüngliche Funktion Einstellen der children Eigenschaft anstelle der innerText Eigenschaft zu verwenden.

Zum Beispiel:

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

Dies wird eine Reihe von all der <ul> ‚s Kinder Elemente zurück.

+0

Dank. Wenn ich das tue bekomme ich das: '' $ node stackOverflow.js {'0': {}, '1': {}, '2': {}, '3': {}, '4 ': {},' 5 ': {}} '' wie leeres Array. –

+0

Das wird nicht funktionieren aus Gründen, die in meiner Antwort erwähnt werden – devilpreet

+0

@devilpreet Danke !! genau was ich wollte. –