首页 > 解决方案 > 如何在 TripAdvisor 中使用 Puppeteer.js (node.js) 获取动态 Html 标签的内部文本?

问题描述

如何使用循环或 Puppeteer 函数 https://www.tripadvisor.com/Restaurant_Review-g294308-d3937445-Reviews-Maki-Quito_Pichincha_Province.html 获取位于此页面中的所有 10条评论innerText

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

我这样做是出于教育目的。评论在class="partial_entry"里面,我想得到一个动态 Html 标记的 innerText(我想要所有 10 个),就像你在这里看到的那样:

在此处输入图像描述

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

它有点困难,因为评论 IDautogenerated就像id="review_xxxxxxxxx"并且由于我没有静态父级,所以无法通过复制 CSS 路径的循环进行迭代。

标签: htmlnode.jschromiumpuppeteer

解决方案


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

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

这是如何工作的


推荐阅读