【问题标题】:How can I get the innerText of Dynamic Html tags using Puppeteer.js (node.js) in TripAdvisor?如何在 TripAdvisor 中使用 Puppeteer.js (node.js) 获取动态 Html 标签的内部文本?
【发布时间】:2019-05-10 22:36:13
【问题描述】:

如何使用 innerText 属性通过循环或 Puppeteer 函数 https://www.tripadvisor.com/Restaurant_Review-g294308-d3937445-Reviews-Maki-Quito_Pichincha_Province.html 获取位于此页面中的所有 10 个 cmets?

我想出的唯一解决方案是获取整个 cmets 容器的 outerHTML,然后尝试对所有 cmets 进行子串化,但这不是最优的,我认为这是一种更困难的方法。也许我找不到 Puppeteer 中更简单的解决方案?

我这样做是出于教育目的。 cmets 在 class="partial_entry" 中,我想获取 Dynamic Html 标记的 innerText(我想要全部 10 个),就像您在此处看到的那样:

如果我在哪里打开包含 <div class="review-container" data-reviewid="606551292" data-collapsed="true" data-deferred="false"><!--trkN:3--> 的 div,我会得到另一个 id="review_582693262"。言归正传,如果我找到具有 class="partial_entry"<div>,这将是我的评论所在的位置。我尝试了一些东西,但我得到了 null,因为找不到它,因为每个评论的父 <div> 都有一个唯一的 ID,例如 id="review_xxxxxxxxx"

这有点困难,因为评论 ID 是 autogenerated,就像 id="review_xxxxxxxxx" 一样,并且由于我没有静态父级,因此无法使用复制 CSS 路径的循环进行迭代。

【问题讨论】:

  • 通配符 css 选择器是否有效?即[id*="review_"]
  • 今晚我会试试这个,我想它可能会奏效。

标签: html node.js chromium puppeteer


【解决方案1】:

为什么不只选择那些具有partial_entry 类的元素呢?这有效:

let comments = await page.evaluate(() =>
    [...document.querySelectorAll(".partial_entry")].map(item => item.textContent)
);

【讨论】:

  • 我通过计算所有具有“partial_entry”的标签找到了解决问题的方法,但这更好,因为我特别需要在您的解决方案中使用“.partial_entry”之类的类。谢谢。
猜你喜欢
  • 2015-03-12
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多