如何使用Puppeteer读取span元素的值

时间:2018-07-12 13:59:38

标签: node.js puppeteer

我正在尝试进行一些Web抓取,以读取html页面中的某些行。我需要在某些<span>元素中寻找在页面中重复出现的文本。在下面的示例中,我想以['文本编号1','文本编号2','文本编号3']

组成的字符串结尾
<html>
    ...
    <span>Text number 1</span>
    ...  
    <span>Text number 2</span>
    ...
    <span>Text number 3</span>
    ...
</html>

我有以下代码

sElements = ' ... span'; // I declare the selector.
cs = await page.$$(sElements); // I get an array of ElementHandle

选择器的工作方式与Google Chrome开发人员工具一样,可以准确捕获我要查找的3个元素。同样,cs变量由三个元素组成的数组填充。但是我正在尝试

for(c in cs)
    console.log(c.innerText);

但未定义会被记录。我尝试使用.text .value .innerText .innerHTML .textContent ...我不知道我缺少什么,因为我认为这真的很简单

我也尝试过使用相同的未定义结果。

cs = await page.$$eval(sElements, e => e.innerHTML);

1 个答案:

答案 0 :(得分:5)

这是一个获取最后一个span元素的innerText的示例。

  let spanElement;

  spanElement = await this.page.$$('span');
  spanElement = spanElement.pop();
  spanElement = await spanElement.getProperty('innerText');
  spanElement = await spanElement.jsonValue();

如果仍然无法获取任何文本,请确保选择器正确,并且span元素已定义了innerText(不是externalText)。您可以在Chrome控制台中运行$(selector)进行检查。