【问题标题】:TypeError: Cannot convert undefined or null to object PuppeteerTypeError:无法将 undefined 或 null 转换为对象 Puppeteer
【发布时间】:2021-12-07 05:42:39
【问题描述】:

问题是我在 puppeteer 中有一个函数,它返回一个对象列表,但是当我想分析它时,它告诉我它是 null 或未定义。

  await page.waitForSelector(('.carousel .loaded'), { timeout: 90000 })
  const _img = await page.evaluate(
  () => document.querySelectorAll('.carousel .loaded li'));

当我分析答案时,它告诉我它是空的。

 if( Object.keys(_img).length > 0){ //do }

 if( _img.length > 0){ //do }

如果我在浏览器控制台中重复查询,它会起作用。

【问题讨论】:

  • 请用英文提问。
  • 不幸的是,page.evaluate() 只能传输可序列化的值(大致是 JSON 可以处理的值)。 document.querySelectorAll() 返回一个不可序列化的 DOM 元素集合。您需要返回可序列化的值(文本数组等)或使用 page.$$(selector)ElementHandle API 之类的东西。

标签: node.js typescript puppeteer browser-automation


【解决方案1】:

问题如@vsemozhebuty所说:

不幸的是,page.evaluate() 只能传输可序列化的值(大致是 JSON 可以处理的值)。 document.querySelectorAll() 返回一个不可序列化的 DOM 元素的集合。您需要返回可序列化的值(文本数组等)或使用 page.$$(selector)ElementHandle API 之类的东西。

我必须返回一个可序列化的值(文本数组等):

await page.waitForTimeout(5000)
const _img = await page.evaluate(
  () => 
  Array.from(document.querySelectorAll('.carousel .loaded li [role="img"]')).map((d) => d.getAttribute('class'))
  );

【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2023-01-20
    • 2019-10-25
    • 1970-01-01
    • 2022-06-16
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多