【发布时间】:2019-11-04 10:21:21
【问题描述】:
我想获取一个具有特定类名的字符串,比如说“CL1”。
这是过去常做的事情,它奏效了: (我们在一个 asycn 函数中)
var counter = await page.evaluate(() => {
return document.querySelector('.CL1').innerText;
});
现在,几个月后,当我尝试运行代码时,我得到了这个错误:
Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null
我在之前的sn-p代码前后对一些console.log()做了一些调试,发现这是罪魁祸首。
我查看了网页的代码,里面有特定的类。
但是我发现了另外两个同名的类。
它们三个都嵌套在许多类的深处。
既然我知道我感兴趣的类层次结构,那么选择我想要的类的正确方法是什么?
编辑: 由于有三个具有相同名称的类名,并且我想从第一个中提取信息,我可以在 querySelector() 上使用数组表示法来访问第一个中的信息吗?
编辑2: 我运行这个:
return document.querySelector('.CL1').length;
我得到了
Error: Evaluation failed: TypeError: Cannot read property 'length' of null
这变得更加混乱......
编辑 3: 我尝试了 Md Abu Taher 的建议,我看到他提供的代码 sn-p 没有返回 undefined。这意味着选择器对我的代码可见。
然后我运行这段代码:
var counter = await page.evaluate(() => {
return document.querySelector('#react-root > section > main > div > header > section > ul > li:nth-child(1) > a > span').innerText;
});
我得到了同样的错误:
Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null
【问题讨论】:
-
能否提供您要访问的页面的网址?
-
除了确保类名没有改变之外,在调用
querySelector之前确认您正在等待页面加载。 -
@KrzysztofKrzeszewski 感谢您的努力,但这是一个内网 URL
-
@zaquest 是的,处理得很好。
-
你在等待dom中的内容加载吗?
标签: javascript node.js web-scraping puppeteer