TypeError: Cannot read property 'innerText' of null
TypeError: Cannot read property 'innerText' of null
我正在使用 "puppeteer": "^1.16.0",
。
尝试测试我的页面时出现以下错误:
我正在使用以下代码检查 table 是否具有正确的数据:
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
});
对我做错了什么有什么建议吗?
感谢您的回复!
所以你得到错误是因为元素不存在。如果您期望它存在,那么您需要弄清楚选择器中的错误。
您的评论让人觉得您希望它在某些情况下不存在。因此,您需要先将其分解并确保该元素存在,然后再尝试访问它。
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();
我正在使用 "puppeteer": "^1.16.0",
。
尝试测试我的页面时出现以下错误:
我正在使用以下代码检查 table 是否具有正确的数据:
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
});
对我做错了什么有什么建议吗?
感谢您的回复!
所以你得到错误是因为元素不存在。如果您期望它存在,那么您需要弄清楚选择器中的错误。
您的评论让人觉得您希望它在某些情况下不存在。因此,您需要先将其分解并确保该元素存在,然后再尝试访问它。
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();