如何使用javascript在ul中循环li

如何使用javascript在ul中循环li,javascript,web-scraping,web-deployment-project,nightmare,Javascript,Web Scraping,Web Deployment Project,Nightmare,我想在ul>中循环每个li>,然后将它们添加到一个数组中。我应该如何创建一个for循环来返回每个li并将它们放入数组中。我被卡住的地方是把li循环起来 var Nightmare = require('nightmare'); var nightmare = Nightmare({ show: false }) nightmare .goto('https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux') .wait(500)

我想在ul>中循环每个li>,然后将它们添加到一个数组中。我应该如何创建一个for循环来返回每个li并将它们放入数组中。我被卡住的地方是把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>

通过将原始函数调整为使用
子属性而不是
innerText
属性,可以获得所有
  • 的数组

    例如:

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

    这将返回一个包含所有
      子元素的数组。

      问题是,当您在then()中预期结果时,会调用undernedream.ipc,并尝试stringify/destringify将其发送到您的应用程序。HTMLElements(由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' ]
      
      const噩梦=require(“噩梦”);
      const噩梦=噩梦({
      秀:没错,
      openDevTools:是的,
      });
      噩梦
      后藤先生('https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux')
      .评估(功能(选择器){
      var links=document.queryselectoral(选择器);
      通过的var=[];
      
      对于(var ii=0;ii感谢您的回复。如果我这样做,我会得到以下结果:
      $node stackOverflow.js{'0':{},'1':{},'2':{},'3':{},'4':{},'5':{}
      类似于空数组。由于我在报告中提到的原因,这不会起作用answer@devilpreet谢谢!!正是我想要的。