简体   繁体   English

使用 Puppeeter 在 class 中选择一个 div

[英]Selecting a div within a class with Puppeeter

hi im trying to select a given div with in a class.嗨,我正在尝试 select 在 class 中的给定 div。 The html is set up like so: html 的设置如下:

<div class="items">
    <div>fist div</div>
    <div>second div</div>
    <div>third div</div>
</div>
<div class="items">
    <div>fist div two</div>
    <div>second div two</div>
    <div>third div two</div>
</div>
<div class="items">
    <div>fist div three</div>
    <div>second div three</div>
    <div>third div three</div>
</div>

my script is like this:我的脚本是这样的:

  let info = await page.evaluate(() => {
    let data = [];
    let elements = document.getElementsByClassName("items");
    let yr = elements[0].getElementsByTagName("div");
    for (var i of yr) {
      data.push(i.textContent);
    }
    return data;
  });

this returns all the divs inn ann array like so这会像这样返回所有 divs inn 数组

["fist div"],["second div"],["third div"]

what im trying to achive is to get all the divs inn all the classes.我试图实现的是让所有的 div 客栈所有的课程。 so it would look like:所以它看起来像:

[
["fist div"],["second div"],["third div"],
["fist div two"],["second div two"],["third div two"],
["fist div three"],["second div three"],["third div three"],
]

i was making a foor loop but i cant seem to ge it to work.我正在做一个循环,但我似乎无法让它工作。 any ideas?有任何想法吗?

Well, you'll need two loops:好吧,你需要两个循环:

  let info = await page.evaluate(() => {
    let data = [];
    let elements = document.getElementsByClassName("items");
    for (var j in elements) {
      let yr = elements[j].getElementsByTagName("div");
      for (var i of yr) {
        data.push(i.textContent);
      }
    }
    return data;
  });

or, more readably:或者,更易读:

let info = await page.evaluate(() => {
  let data = [];
  document.getElementsByClassName("items").forEach(e =>
    e.getElementsByTagName("div").forEach(i => data.push(i.textContent))
  );
});

just add for loop and get the length to get all elements, when you use elements[0] you just get the first <div class="items">只需添加 for 循环并获取获取所有元素的长度,当您使用elements[0]时,您只需获得第一个<div class="items">

 let info = await page.evaluate(() => { let data = [];
    let elements = document.getElementsByClassName("items");
    for(let x=0;x<elements.length;x++){  
        let yr = elements[x].getElementsByTagName("div");
    for (var i of yr) {
      data.push(i.textContent);
    }
    }
      
    return data;
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM