Selenium新手。我试图从填充了动态数据的表中搜索结果:
我希望我可以添加链接,但它受密码保护和共享会是一个安全问题。我很难找到与帖子相似的内容作为一个合适的例子,欢迎提出建议。
对于上一个表(也基于动态信息,但不是下拉列表),此代码对我有用:
# WORKED FOR NON-DROPDOWN DYNAMIC TABLE
require(RSelenium)
pJS <- phantom()
Sys.sleep(5)
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
url <- paste0("http://",un,":",pass,"@egauge", meter, ".egaug.es/57A4C/check.html")
remDr$navigate(url)
#remDr$screenshot(display = TRUE)
doc <- htmlParse(remDr$getPageSource()[[1]])
remDr$close()
readHTMLTable(doc)[[2]]
但如果我对当前表使用相同的方法,它会返回下拉框中的所有值。我目前的尝试看起来像这样:
# NON-WORKING ATTEMPT FOR DROPDOWN DYNAMIC TABLE
require(RSelenium)
pJS <- phantom()
Sys.sleep(5)
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
url <- paste0("http://",un,":",pass,"@egauge", meter, ".egaug.es/57A4C/settings.html")
remDr$navigate(url)
remDr$findElement("xpath", '//*[@id="regsDiv"]/div/table/tbody/tr[1]/td[3]/span[2]/select[1]')$selectTag()
但这只返回元素,选项和文本列表。我需要选择的选项。一旦这个工作,我循环使用tr[]
(来自xpath)并刮除所有选定的值。
谢谢!任何帮助赞赏!对不起,我没有一个很好的工作实例。
编辑:更新以回复。
答案 0 :(得分:1)
您可以使用isElementSelected
方法:
remDr$navigate("http://nhb.gov.in/OnlineClient/MonthlyPriceAndArrivalReport.aspx")
elem <- remDr$findElement(
using = "id",
value = "ctl00_ContentPlaceHolder1_ddlyear"
)
options <- elem$selectTag()
res <- vapply(options$elements, function(x) x$isElementSelected()[[1]],
logical(1))
res
> res
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[16] FALSE FALSE FALSE
更新:
dev分支现在将选定的字段添加到selectTag
方法:
devtools::install_github("ropensci/RSelenium")
remDr$navigate("http://nhb.gov.in/OnlineClient/MonthlyPriceAndArrivalReport.aspx")
elem <- remDr$findElement(
using = "id",
value = "ctl00_ContentPlaceHolder1_LsboxCenterList"
)
options <- elem$selectTag()
options$selected
> options$selected
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[16] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[31] FALSE FALSE FALSE FALSE
# Now select "AGRA" and BANGALORE
myScript <-
"for (var i=0, iLen=arguments.length; i<iLen; i++) {
arguments[i].selected = true;
}"
remDr$executeScript(myScript, options$elements[c(2,5)])
newoptions <- elem$selectTag()
newoptions$selected
> newoptions$selected
[1] FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[16] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[31] FALSE FALSE FALSE FALSE