【问题标题】:How to grab 2nd element of querySelectorAll and loop thru its elements using Puppeteer node js如何使用 Puppeteer 节点 js 获取 querySelectorAll 的第二个元素并循环遍历其元素
【发布时间】:2020-03-07 08:11:57
【问题描述】:

我试图抓取这个网站,他们的网站布局使用相同的类名来获取我需要的信息。我尝试使用 document.querySelectorAll() 但它返回未定义。

let shoeHtml = await page.evaluate( () => document.querySelectorAll('.form-section-right'))

如果我尝试let shoeHtml = await page.evaluate( () => document.querySelectorAll('.form-section-right')[1].innerHTML),它会返回一个字符串,我无法通过它循环并获取我需要的信息

这是 html 代码。 https://pastebin.com/dHbbu5EG

我要获取的信息是a 标签。我也想点击它们。

【问题讨论】:

    标签: javascript node.js puppeteer


    【解决方案1】:

    evaluate 只返回可序列化的数据,页内对象不可序列化。您需要在 puppeteer 执行上下文中使用 evaluateHandlepage.$$,这相当于 querySelectorAll

    let shoeHtml = await page.$$('.form-section-right');
    

    在 puppeteer 上下文中访问元素的属性:

    const innerHTML = await page.evaluate(el => el.innerHTML, shoeHtml[1]);
    

    const innerHTML = await (await shoeHtml[1].getProperty('innerHTML')).jsonValue(); 
    

    【讨论】:

    • console.log(shoeHtml[1].innerHTML)
    • @NinoSoles 该元素在 puppeteer 上下文中,您不能像那样访问元素的属性。编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多