如何将DOM中的每个节点条目与id相关联?

时间:2018-04-09 13:05:30

标签: javascript dom puppeteer

使用Google Chrome Puppeteer,我希望在类似网络聊天的页面上检索所有用户消息。我意识到,当用户在同一分钟内说出任何内容时,例如:

<div class="something"> 20:00 Hi! </div>
<div class="something"> 20:00 Hi! <div> <-- this one just a few seconds after

对我来说,区分这条消息与另一条消息的唯一区别就是它的xpath。但不知何故,当新消息到达并且聊天缓冲区滚动时,每条消息都可以获得新的xpath值。

问题是:如果每条消息具有相同的内部文本和日期/时间,我如何区分它们?

1 个答案:

答案 0 :(得分:0)

正如@keja指出的那样,我只需要获取节点元素的索引并将其保存在某处。

诀窍是:由于在用户消息之后出现了某些内容,索引必须在我将其存储到某处之前手动递增。像:

nodes.forEach((item, index) => {
  const { children } = item;
  const childrenArray = [...children];
  childrenArray.forEach((child) => {
    if (child.classList.contains(someSelector)) {
      const lineElement = [...child.querySelectorAll('div.someClass')];
      const element = lineElement[0];
      const text = element.innerText;
      lines.push({
        id: index + 1,
        text,
      });
    }
  });
});