使用R和RSelenium进行Web抓取--下拉菜单和选择的困难

jfgube3f  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在尝试访问此网站上的文件:https://public.education.mn.gov/MDEAnalytics/DataTopic.jsp?TOPICID=11我希望级别与县相对应,并且我希望每年都这样做。为了这个例子,假设我只想在2022年这样做。我已经启动并运行了RSelenium,但是我试图使用RSelenium查找选择菜单元素的所有操作都不起作用。
例如:

remDr <- remote_driver$client
remDr$open()
remDr$navigate("https://public.education.mn.gov/MDEAnalytics/DataTopic.jsp?TOPICID=11")
data_table <- remDr$findElement(using = 'id', value = "cmbCOLuMN")

返回错误:“无法使用给定的搜索参数在页面上定位元素”。
我已经尝试改变findElement()中的using和values参数,但仍然没有这样的运气。我将非常感谢任何关于如何选择县级别和年份为2022的见解。

更新:基于之前一个关于iframe的stackoverflow响应,我能够在这段代码上取得更多进展,但我仍然在最后卡住了:

remDr$open()
remDr$navigate("https://public.education.mn.gov/MDEAnalytics/DataTopic.jsp?TOPICID=11") 
frames <- remDr$findElements('css', "iframe")
remDr$switchToFrame(frames[[1]])
selectElem <- remDr$findElement("id", "cmbCOLUMN1")
selectOpt <- selectElem$selectTag()

我无法使用selectOpt功能选择所需的值,该值可能类似于SelectOpt$text$County

tf7tbtn2

tf7tbtn21#

看起来好像还有一个iframe。我运行了你的代码:

frames <- remDr$findElements('css', "iframe")
remDr$switchToFrame(frames[[1]])

然后点击“列表文件”按钮使用其html id。

# click on a button ------------------------------------
remDr$findElement(using = "id",value = "button1")$clickElement()

单击该按钮会显示第二个iframe中的所有可用文件,所以我找到了第二个iframe,其html ID为(#report),并切换到它。

# switch to iframe 2 ------------------------------------
report_frame <- remDr$findElement(using = "id",value = "report")
remDr$switchToFrame(report_frame)

然后我拉网页的html和扫描它的表格

# Pull page html
page_html <- remDr$getPageSource()[[1]] %>% 
  read_html()

# extract tables

tables <- page_html %>% html_table()

files_table <- tables[[2]]

我假设这是您想要的?一个包含所有可用文件列表的数据框:

# A tibble: 1,458 × 6
   X1       X2       X3     X4                                     X5     X6   
   <chr>    <chr>    <chr>  <chr>                                  <chr>  <chr>
 1 ""       ""       ""     ""                                     ""     ""   
 2 "Level"  "Name"   "Year" "Document"                             "Data… "Hel…
 3 "County" "Aitkin" "2022" "2022 Minnesota Student Survey County" "pdf"  ""   
 4 "County" "Aitkin" "2019" "2019 Minnesota Student Survey County" "pdf"  ""   
 5 "County" "Aitkin" "2016" "2016 Minnesota Student Survey County" "pdf"  ""   
 6 "County" "Aitkin" "2013" "2013 Minnesota Student Survey County" "pdf"  ""   
 7 "County" "Anoka"  "2022" "2022 Minnesota Student Survey County" "pdf"  ""   
 8 "County" "Anoka"  "2019" "2019 Minnesota Student Survey County" "pdf"  ""   
 9 "County" "Anoka"  "2016" "2016 Minnesota Student Survey County" "pdf"  ""   
10 "County" "Anoka"  "2013" "2013 Minnesota Student Survey County" "pdf"  ""   
# … with 1,448 more rows
# ℹ Use `print(n = ...)` to see more rows

相关问题