【发布时间】:2022-11-09 20:32:40
【问题描述】:
我想从这个有 shadow-dom 的网站中提取数据。我想我已经设法使用 JavaScript 访问了 shadow-dom 内的元素,但我还没有弄清楚如何将 JavaScript 的返回值用作 WebElements 以便我可以处理数据。
library(RSelenium)
rD <- rsDriver(browser="firefox", port=4547L, verbose=F)
remDr <- rD[["client"]]
remDr$navigate("https://www.transfermarkt.us")
## run script to enable dropdown list in the website. This creates a <ul> tag in the shadow-dom which lists all items in the dropdown list.
remDr$executeScript("return document.querySelector('tm-quick-select-bar').setAttribute('dropdown-visible', 'countries')")
Sys.sleep(5)
这只是包含 shadow-dom 的部分。我不确定这是否是必需的,但这是下拉列表存在的地方
wrapper <- remDr$findElement(using="tag name", value="tm-quick-select-bar")
下面是访问下拉列表的脚本
script <- 'return document.querySelector("#main > header > div.quick-select-wrapper > tm-quick-select-bar").shadowRoot.querySelector("div > tm-quick-select:nth-child(2) > div > div.selector-dropdown > ul");'
test <- remDr$executeScript('return document.querySelector("#main > header > div.quick-select-wrapper > tm-quick-select-bar").shadowRoot.querySelector("div > tm-quick-select:nth-child(2) > div > div.selector-dropdown > ul");', list(wrapper))
这将返回以下列表。
> test
$`element-6066-11e4-a52e-4f735466cecf`
[1] "4adac8f8-2c94-4e48-b7a3-521eb961ef8c"
我不知道如何从中提取项目。它看起来不像是一个 WebElement。这个列表是什么,它包含什么信息?我怎样才能提取它?
我试过这个
lapply(test, function(x){
x$getElementText()
x[[1]]$getElementText()
})
但是,它返回错误:
Error in x$getElementText : $ operator is invalid for atomic vectors
【问题讨论】:
-
我不确定您要访问哪个下拉列表。是默认为 US 的国家选择器吗?