我正在尝试触发单击事件,但在 Ubuntu 服务器中它不起作用。
....
await page.evaluate(() => {
document.querySelector(".phone").firstElementChild.click();
});
.....
最佳答案
如果 DOM 中不存在元素( Document Object Model ),则评估失败。 TypeError: Cannot read properties of null (reading '...')
是这种情况下的一般错误,我可以推荐this StackOverflow question/answer关于这个话题。
(1) 由于您的脚本仅在本地工作,您需要找出在本地打开的抓取页面与在服务器上打开的抓取页面有什么区别的原因:
.phone
的元素类不渲染到 DOM? 为此,您可以:
console.log(await page.content())
) await page.screenshot({ path: __dirname + '/screen.png' })
const screenBase64 = fs.readFileSync(__dirname + '/screen.png', 'base64')
console.log('data:image/png;base64, ' + screenBase64)
您需要自己找到答案,解决方案应该解决这个问题。(2) 如果您的脚本即使在本地也会抛出相同的错误,它会告诉您尝试评估
.phone
在它被渲染到 DOM 之前为时过早。这可以通过等待元素来处理:await page.waitForSelector('.phone')
await page.evaluate(() => {
document.querySelector('.phone').firstElementChild.click()
})
关于javascript - 评估失败 : TypeError: Cannot read properties of null (reading 'firstElementChild' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71779657/