TypeError:无法将 undefined 或 null 转换为对象 Puppeteer
Posted
技术标签:
【中文标题】TypeError:无法将 undefined 或 null 转换为对象 Puppeteer【英文标题】:TypeError: Cannot convert undefined or null to object 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 之类的东西。
【参考方案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'))
);
【讨论】:
以上是关于TypeError:无法将 undefined 或 null 转换为对象 Puppeteer的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:无法解构“未定义”或“空”的属性“记录器”
为什么我得到'TypeError:无法读取属性'slice'的undefined'?
TypeError:无法解构“未定义”或“空”的属性“db”
Nestjs Swagger UnhandledPromiseRejectionWarning:TypeError:无法解构“未定义”或“空”的属性“原型”
无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined