此代码每次都在本地正确运行。但是,当我部署到服务器时(使用铬浏览器的Raspberry Pi上的Ubuntu),有时会出现3/10次尝试的错误。这段代码效果最好...
await page.goto('http://mywebsite.com')
const element = await page.$('div[class="user-tags"]')
const value = await page.evaluate(el => el.textContent, element)
但有时会返回...“错误,获得体验级别错误:评估失败:TypeError:无法读取null的'textContent'属性”
所以我四处寻找解决方案并尝试了此方法,但是每次都失败(两个代码块都在本地运行良好)...
await page.goto('http://mywebsite.com')
await page.waitForSelector('div[class="user-tags"]')
const element = await page.$('div[class="user-tags"]')
const value = await page.evaluate(el => el.textContent, element)
抛出“获取体验级别超时错误:等待选择器“ div [class =” user-tags“]”失败:超时30000ms超过9/10/2020 @ 06:02:35“
谢谢您的建议!
答案 0 :(得分:1)
第一和第二代码段之间的区别
在第二个代码示例中,您指示伪装者等到目标页面上的div[class="user-tags"]
存在:
await page.waitForSelector('div[class="user-tags"]')
这是从元素获取数据的正确方法-首先确保数据可用,然后查询。
发生超时错误是因为在30秒内找不到给定的元素(这是默认超时)。
解决此问题的方法
首先,您需要弄清楚伪造者为何找不到该元素。
div.user-tags
出现在每个页面上?await page.goto(url, { waitUntil: 'networkidle0' })