首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >page.evaluate()返回空对象

page.evaluate()返回空对象
EN

Stack Overflow用户
提问于 2022-05-11 20:01:12
回答 1查看 813关注 0票数 0

我正在尝试刮这个网页https://poe.ninja/challenge/builds?time-machine=day-6使用木偶。我试过Puppeteer page.evaluate querySelectorAll return empty objects,在这里看到了很多类似的问题。但他们都解决不了我的问题。

这是我的代码:

代码语言:javascript
复制
const scrapeNinja = async () => {
    const browser = await puppeteer.launch({headless: false})

    const page = await browser.newPage()

    await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
        waitUntil: 'domcontentloaded',
    })

    const getArray = await page.evaluate(() => {
        return Array.from(document.querySelectorAll(
                '#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl'
            )).map(e => e.textContent)
    })

    console.log(getArray)
}

我知道从page.evaluate返回的值应该是可序列化的。这个Array.from(document.querySelectorAll('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl')).map(e => e.textContent)不是一个可序列化的值吗?我试着在dev工具部分使用它返回我想要的内容,但是返回到node.js,它只返回空数组.

我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-13 09:56:39

看起来问题在于等待,即使完整的dom内容没有完全加载,您也在寻找元素。

代码语言:javascript
复制
  const scrapeNinja = async () => {
  const browser = await puppeteer.launch({headless: false})

  const page = await browser.newPage()

  await page.goto(`https://poe.ninja/challenge/builds?time-machine=day-6`, {
    waitUntil: 'networkidle2',
  })
  

  const getArray = await page.$$eval('#openSidebar > div > section:nth-child(3) > div > div > div > ul li .css-1h2ruwl',
    el => el.map(item => item.textContent))

  console.log(getArray)
}

scrapeNinja()

这段代码非常适合我,甚至不需要初始化数组。将来使用networkidle2中的waitUntil选项

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72206986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档