Javascript 循环浏览html列表并获取内容

Javascript 循环浏览html列表并获取内容,javascript,puppeteer,Javascript,Puppeteer,我正在处理一个具有以下结构的页面 这是我到目前为止的代码 const puppeter=require('puppeter') 常量main=async()=>{ const browser=wait puppeter.launch() const page=wait browser.newPage() 等待page.goto('link-to-my-website')) 等待page.waitForSelector(“部分[id='名人]”); //const movies=w

我正在处理一个具有以下结构的页面


  • 这是我到目前为止的代码

    const puppeter=require('puppeter')
    常量main=async()=>{
    const browser=wait puppeter.launch()
    const page=wait browser.newPage()
    等待page.goto('link-to-my-website'))
    等待page.waitForSelector(“部分[id='名人]”);
    //const movies=wait page.$$(“#名人>li.list条目”);
    //for(设i=0;i<2;i++){
    //常量元素=电影[i];
    //控制台日志(元素);
    // }
    const movies=wait page.$$(“#著名>li.list条目”,el=>el.innerText);
    movies.forEach(元素=>{
    控制台日志(元素);
    });
    等待浏览器关闭()
    }
    main()
    
    现在我不知道如何将
    span
    的内容放入数组。这样我就可以访问
    a
    标签中的链接。请帮忙

    谢谢

    根据,
    页面。$$
    返回
    元素句柄的数组
    。这些因素也提供了一些好处。您应该能够查询所需的子元素。例如:

    const movies =  await page.$$('#famous > li.list-entry');
    for (const movie of movies) {
        const name = await movie.$eval('.item-name > a', el => el.innerText);
        const itemUploaded = await movie.$eval('.item-uploaded > a', el => el.innerText);
        console.log(name, itemUploaded);
    }
    
    
    根据,
    page.$$
    返回
    ElementHandle
    的数组。这些因素也提供了一些好处。您应该能够查询所需的子元素。例如:

    const movies =  await page.$$('#famous > li.list-entry');
    for (const movie of movies) {
        const name = await movie.$eval('.item-name > a', el => el.innerText);
        const itemUploaded = await movie.$eval('.item-uploaded > a', el => el.innerText);
        console.log(name, itemUploaded);
    }
    
    

    我想你可以用一个css选择器来做这个

    const$$=(选择器,cb)=>新承诺(解析=>
    解析([…document.queryselectoral(选择器)].map(cb));
    $$(“#著名的li.list-entry span a”,el=>el.innerText);
    //甚至更简单
    $$(“#a”,el=>el.innerText)。然后(r=>console.log(r))
    
    
    

    我想你可以用一个css选择器来实现这一点

    const$$=(选择器,cb)=>新承诺(解析=>
    解析([…document.queryselectoral(选择器)].map(cb));
    $$(“#著名的li.list-entry span a”,el=>el.innerText);
    //甚至更简单
    $$(“#a”,el=>el.innerText)。然后(r=>console.log(r))
    
    
    


    目前控制台的输出是什么?@nubinub对象列表以及您希望阵列中的具体内容是什么?电影名称?电影链接?是的,电影标题和数组中的链接每个
    li
    都有一个数组当前控制台的输出是什么?@nubinub对象列表以及您希望数组中有什么?电影名称?电影链接?是的,电影标题和数组中的链接每个
    li
    都有一个数组,我倾向于相信OP确实希望提供一个与
    li
    计数相同大小的数组,这在这个选择器中是不可能的。@nubinub您想让我将html更改为我正在使用的html吗?啊,好的。也许减速机会有帮助(从
    $$(“#著名的李”)
    )谢谢@KooiInc,我稍后会试试。感谢v muchI倾向于相信OP确实希望提供与
    li
    计数相同大小的数组,这在这个选择器中是不可能的。@nubinub您想让我将html更改为我正在使用的html吗?啊,好的。也许减速机会有帮助(从
    $$(“#著名的李”)
    )谢谢@KooiInc,我稍后会试试。谢谢你知道link2不是类名吗?
    .link2
    工作正常吗?很好,我误读了html。这并没有完全解决我的问题,但它帮助我前进了一步,谢谢你知道
    link2
    不是类名吗?
    .link2
    工作正常吗?很好,我误读了html。这并没有完全解决我的问题,但它帮助我向前迈进了一步,谢谢