如何使用Rselenium来删除下拉列表中的所有选项值?
页面来源示例:
<select name="main$ddArea" onchange="javascript:setTimeout('__doPostBack(\'main$ddArea\',\'\')', 0)" id="main_ddArea" class="groupTextBox">
<option selected="selected" value="95182">Area 1</option>
<option value="95183">Area 2</option>
<option value="95184">Area 3</option>
<option value="95185">Area 4</option>
<option value="95186">Area 4</option>
</select>
需要的结果是一个向量,每个值都作为一个元素。例如,values = c(“95182”,“95183”,“95184”,“95185”,“95186”)
获取值的字符串也可能有效,因为它可以拆分为元素,例如,使用strsplit。
带有'value'或'option'的getElementAttribute()不起作用。如,
dd.areas = remDr$findElement(using='id', value="main_ddArea")
dd.areas$getElementAttribute('option')
或
dd.areas$getElementAttribute('value')
getElementText()
找到一个文本字符串,例如“Area 1 / n Area 2 / n Area 3 / n ....”。但该文本以后不能用于导航下拉列表。换句话说,当使用$findelement()
导航下拉列表时,需要一个值来填充下拉列表;文字不起作用。
package documentation似乎不包含对下拉列表的引用,vignette也没有。
答案 0 :(得分:3)
您可以使用findElement
定位select
代码,然后获取outerHTML
并解析生成的html:
remDr$navigate("https://www.tutorialspoint.com/html/html_select_tag.htm")
webElem <- remDr$findElement("name", "dropdown")
appHTML <- webElem$getElementAttribute("outerHTML")[[1]]
doc <- htmlParse(appHTML)
doc["//option", fun = function(x) xmlGetAttr(x, "value")]
> doc["//option", fun = function(x) xmlGetAttr(x, "value")]
[[1]]
[1] "Data Structures"
[[2]]
[1] "Data Mining"
当使用基于gecko的浏览器运行selenium server 2时,Firefox和get元素属性出现了一些问题,请参阅GetAttribute of WebElement in Selenium Firefox Driver Returns Empty。在这种情况下,您可以使用JavaScript来获取属性
remDr$navigate("https://www.tutorialspoint.com/html/html_select_tag.htm")
webElem <- remDr$findElement("name", "dropdown")
jsScript <- "var element = arguments[0]; return element.outerHTML;"
appHTML <- remDr$executeScript(jsScript, list(webElem))[[1]]
doc <- htmlParse(appHTML)
doc["//option", fun = function(x) xmlGetAttr(x, "value")]
> doc["//option", fun = function(x) xmlGetAttr(x, "value")]
[[1]]
[1] "Data Structures"
[[2]]
[1] "Data Mining"