Rselenium - 如何抓取所有下拉列表选项值
Rselenium - How to scrape all drop down list option values
如何使用 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。
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"
如何使用 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。
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 的浏览器时出现,请参阅
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"