我正在使用"puppeteer": "^1.16.0",
。
尝试测试我的页面时,出现以下错误:
我正在使用以下代码检查表是否具有正确的数据:
await page.evaluate(async () => {
let arr = [];
let grabFromRow = (row, child) => row
.querySelector(`td:nth-child(${child})`)
.innerText // ====> if a value is 'null', I get an error here!
.trim();
const rows = "#table > thead > tr"
const t = document.querySelectorAll(rows)
for (const r of t) {
arr.push({
date: grabFromRow(r, 1).trim(),
quarter: grabFromRow(r, 2).trim(),
consensus_estimate: grabFromRow(r, 3).trim(),
reported_eps: grabFromRow(r, 4).trim(),
gaap_eps: grabFromRow(r, 5).trim(),
revenue_estimate: grabFromRow(r, 6).trim(),
actual_revenue: grabFromRow(r, 7).trim(),
});
}
console.log(arr);
return arr
});
有人建议我在做什么错吗?
感谢您的答复!
答案 0 :(得分:2)
因此您会收到错误消息,因为该元素不存在。如果您期望它存在,那么您需要找出选择器中的错误。
您的评论似乎表明您希望在某些情况下不存在该评论。因此,您需要先对其进行分解,并确保该元素存在,然后再尝试访问它。
let grabFromRow = (row, child) => {
const td = row
.querySelector(`td:nth-child(${child})`)
return td ? td.innerText.trim() : ''
}
或使用真实性检查并在一行中设置默认值
let grabFromRow = (row, child) =>
(row.querySelector(`td:nth-child(${child})`) || {innerText : ''})
.innerText // ====> if a value is 'null', I get an error here!
.trim();