在 RSelenium 中循环遍历 WebElements 列表时,我如何 select 只有特定的 class?

How do I select only a specific class when looping over list of WebElements in RSelenium?

出于纯粹的教育目的,我正在尝试使用 RSelenium (Link to website) 抓取荷兰零售网站的评论。然而,我很难以正确的格式提取有关评论的信息。最后,我的目标是遍历所有评论并仅提取我需要的每条评论信息(f.i。只是评论者的位置)。

这是评论的 html 部分(第 1 部分)和特定评论中的实际信息(第 2 部分):

html piece 1

html piece 2

现在我已经像这样保存了评论列表:

rdriver <- rsDriver(browser = "chrome",
                    chromever = "101.0.4951.15",
                    port = 2232L
)

driver <- rdriver[["client"]]

reviews <- driver$findElements(using = 'xpath', '//*[@class="review js-review"]')
review <- reviews[[1]]
review$getElementText()

最后一条命令给出了第一个评论中出现的所有文本,如评论标题、评论者的姓名、年龄和位置、评论的实际文本等:

1 “Zoek niet verder als je een tv zoek met deze grote en alle laatste Sma\nGer1965rotterdam 60-69 jaar Rotterdam 2022 年 4 月 18 日 Heeft dit artikel gekocht\nIk raad dit product aan\nGoede beeldkwaliteit\nEenvoudig in gebruik\nJuiste formaat\nHeeft alles wat een tv moet hebben onder ander Sat.tv.ontvanger en alle nieuwste Smart Mogelijkheden hij is eind februari 2022 op de Hollandse markt gekomen dus nieuwer kan het niet !!!!!!!!!\n是否有评论?\n2 0"

但我实际上只想获取评论的某些部分,例如评论者的位置,在本例中 'Rotterdam' 在第一行的末尾。

我试过了:

check <- review$findElement(using = 'xpath', './/*[@data-test="review-author-city"]')
check$getElementText()

但它仍然像以前一样给了我整段文字,而不仅仅是 'Rotterdam'。有谁知道我做错了什么?我在网上看了很多来解决这个问题,但似乎找不到。应该可以遍历网络元素列表并仅从这些元素中提取某些信息,对吗?就像我说的那样,我这样做是出于教育目的,所以我对 material.

很陌生

非常感谢任何帮助!

我认为您的代码存在问题,因为您的评论列表包含 WebElement 对象。您不能在 WebElement 对象 afaik 上使用 findElement。

要获取所有评论的位置,您可以直接获取它们。

driver$findElements(using = 'xpath', '//li[@data-test="review-author-city")

更新:我自己在 RSelenium 中进行了尝试,发现有一个方法 findChildElement。您可以在此处找到更多相关信息:https://rdrr.io/cran/RSelenium/man/webElement-class.html

在你的情况下这应该有效:

driver <- rdriver[["client"]]

reviews <- driver$findElements(using = 'xpath', '//*[@class="review js-review"]')
review <- reviews[[1]]

check <- review$findChildElement(using = 'xpath', './/*[@data-test="review-author-city"]')
check$getElementText()