Rselenium - 如何抓取所有下拉列表选项值

Rselenium - How to scrape all drop down list option values

如何使用 Rselenium 抓取下拉列表中的所有选项值?

页面来源示例:

<select name="main$ddArea" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;main$ddArea\&#39;,\&#39;\&#39;)&#39;, 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。

getElementAttribute() 与 'value' 或 'option' 不工作。例如,

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 does not appear to contain references to drop down lists and neither does the vignette

您可以使用 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"

Firefox 和获取元素属性最近出现了一些问题,这些问题在 运行 selenium server 2 和基于 gecko 的浏览器时出现,请参阅 。在这种情况下,您可以使用 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"