Puppeter仅当dom中有< sup>子标记时,才使用< span>标记获取所有元素中的文本

c8ib6hqw  于 2021-09-13  发布在  Java
关注(0)|答案(2)|浏览(389)

我是新手。用 puppet 演员做实验。我的html如下所示

<html>
<div id="container">
      <span >
        Parent Text
        <sup name="20">Child Text</sup>  
      </span>
      <span >
       Parent Text
        <sup name="20">Child Text</sup>  
      </span>
      <span >
        Parent Text
        <sup name="20">Child Text</sup>  
      </span>

    </div>
</html>

js文件

const list = await page.evaluate(() => {
     const spans = document.getElementsByTagName("span")[0];
     let data=[];
    for (var i = 0; i < spanEntity.children.length; ++i){
      if(spanEntity.children[i].innerText ==="Child Text"){
        data.push(spans.innerText);
      }
    }
})

这适用于第一个跨度图元。但是我如何才能为dom中的所有span元素做到这一点呢。我知道我们可以使用queryselectorall检查dom中的所有跨元素。但我不知道如何检查子节点。任何帮助都将不胜感激。提前谢谢你!!。

vulvrdjw

vulvrdjw1#

如下面所示调整代码,您将遍历所有 span 元素:

const spans = document.getElementsByTagName("span");
let data=[];

for (var i = 0; i < spans.length; ++i){
    var sup = spans[i].getElementsByTagName("sup");

  if(sup[0].innerText ==="Child Text"){
    data.push(spans[i].innerText);
  }
}

console.log(data);

https://jsfiddle.net/praveen_tamil/6fl2wbkt

ergxz8rk

ergxz8rk2#

具有 mapfilter :

let data = await page.$$eval('span', spans => spans
  .filter(span => span.querySelector('sup'))
  .map(span => span.innerText)
)

相关问题