Javascript 获取所有无序列表元素及其文本木偶

Javascript 获取所有无序列表元素及其文本木偶,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我试图检索一个无序列表以及其中的所有元素。中有的城市名称作为文本,我想得到这些城市 await page .$eval( "body > div.page > div.container.account.cf > div.account-content > div.addressPage > div.addressCard.addAddressCard > div:nth-child(6) > ul",

我试图检索一个无序列表以及其中的所有元素。
中有
  • 的城市名称作为文本,我想得到这些城市

    await page
          .$eval(
            "body > div.page > div.container.account.cf > div.account-content > div.addressPage > div.addressCard.addAddressCard > div:nth-child(6) > ul",
            (ul) => {
              console.log(ul.innerHTML);
              for (let i = 0; i < ul.children.length; i++) {
                cityArray.push(ul.children[i].textContent);
              }
            }
          )
          .then((array) => console.log(array))
          .catch((err) => console.log(err));
    
    等待页面
    25美元评估(
    “body>div.page>div.container.account.cf>div.account-content>div.addressPage>div.addressCard.addAddressCard>div:nth child(6)>ul”,
    (ul)=>{
    log(ul.innerHTML);
    for(设i=0;iconsole.log(数组))
    .catch((err)=>console.log(err));
    

    当我尝试使用
    console.log
    时,不会打印任何内容。

    由于
    pageFunction
    是在浏览器上下文中计算的,因此需要在浏览器中查看控制台输出

    作为替代方案,您可以将内部HTML保存在函数外部并记录它,然后:

    constulhtml='';
    等待页面。$eval(
    “body>div.page>div.container.account.cf>div.account-content>div.addressPage>div.addressCard.addAddressCard>div:nth child(6)>ul”,
    (ul)=>{
    ulHtml=ul.innerHTML;
    }
    );
    
    关于你的标题问题:
    .innerHTML
    没有返回数组[],所以你不能将它保存在那样的数组中。要获得包含每个
  • 文本的数组,只需在
    页面函数中对其进行循环:

    等待页面。$eval(
    “body>div.page>div.container.account.cf>div.account-content>div.addressPage>div.addressCard.addAddressCard>div:nth child(6)>ul”,
    (ul)=>{
    常数cityArray=[];
    for(设i=0;i{console.log(cityArray)});
    
    控制台.log
    无法工作,因为
    页面功能是在浏览器上下文中评估的,因此您需要在浏览器中查看控制台输出

    作为替代方案,您可以将内部HTML保存在函数外部并记录它,然后:

    constulhtml='';
    等待页面。$eval(
    “body>div.page>div.container.account.cf>div.account-content>div.addressPage>div.addressCard.addAddressCard>div:nth child(6)>ul”,
    (ul)=>{
    ulHtml=ul.innerHTML;
    }
    );
    
    关于你的标题问题:
    .innerHTML
    没有返回数组[],所以你不能将它保存在那样的数组中。要获得包含每个
  • 文本的数组,只需在
    页面函数中对其进行循环:

    等待页面。$eval(
    “body>div.page>div.container.account.cf>div.account-content>div.addressPage>div.addressCard.addAddressCard>div:nth child(6)>ul”,
    (ul)=>{
    常数cityArray=[];
    for(设i=0;i{console.log(cityArray)});
    
    谢谢,这很有效,这是另一个问题。城市阵列被推后,我该怎么做。我已经编辑了代码以显示承诺链接,但我收到一个错误,说“cityArray未定义”,当我的答案有帮助时,请在我的答案左侧用复选标记。要在下一个
    中使用数组,则需要返回它。我已经相应地更新了我的答案。谢谢,这很有效,这是另一个问题。城市阵列被推后,我该怎么做。我已经编辑了代码以显示承诺链接,但我收到一个错误,说“cityArray未定义”,当我的答案有帮助时,请在我的答案左侧用复选标记。要在下一个
    中使用数组,则需要返回它。我已经相应地更新了我的答案。