如何从 RSelenium 中的 elementID 创建可点击的 webElement?

问题描述

我正在尝试从这个 GIS site 下载数据,但我需要的一些按钮元素位于 shadow dom 中。

enter image description here

我的策略是运行一个 JS 脚本,该脚本使用 shadowRoot.querySelector 获取“elementID”并使用它指向我需要单击的按钮。我以为我可以使用 RSelenium::webElement 创建按钮元素,但是当我尝试点击它们时出现错误

pacman::p_load(RSelenium,glue,dplyr,rvest)

driver <- rsDriver(browser = c("chrome"),chromever = "90.0.4430.24")
chrome <- driver$client

wisc_url <- "https://data.dhsgis.wi.gov/datasets/wi-dhs::covid-19-historical-data-by-county/about"

chrome$navigate(url = wisc_url)
Sys.sleep(5)

# open side panel
wisc_dl_panel_button <- chrome$findElement("css selector","#main-region > div.content-hero > div.content-hero-footer > div.content-footer.flex-row > div.content-footer-right > div.yielded > button")
wisc_dl_panel_button$clickElement()
# sometimes it needs time to create the file
Sys.sleep(120)

# get elementId from shadow DOM
wisc_dlopts_elt_id <- chrome$executeScript("return document.querySelector('hub-download-card').shadowRoot.querySelector('calcite-card').querySelector('calcite-dropdown')")[[1]]
wisc_dlopts_elt <- webElement(elementId = wisc_dlopts_elt_id,browserName = "chrome",port = 4567)
wisc_dlopts_elt$clickElement()

## Error in checkerror(res) : 
##  Undefined error in httr call. httr output: length(url) == 1 is not TRUE

我不认为这是我使用的特定元素 ID。我尝试了这个 create-webElement 方法和其他可以使用典型的 findElement >> clickElement 方法点击的元素,但我仍然得到同样的错误

解决方法

您是否尝试使用 findElements

如果你有 CSS 或 Xpath,你可以尝试这样的事情:

frames <- remDr$findElements("css selector",'your_css')

然后

frames[[1]]$clickElement()

这就是我经常做的..