TypeError:无法读取null的属性“ innerText”

时间:2019-06-21 20:33:34

标签: javascript puppeteer

我正在使用"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
    });

有人建议我在做什么错吗?

感谢您的答复!

1 个答案:

答案 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();