2016-10-10 6 views
1

드롭 다운 목록의 모든 옵션 값을 Rselenium을 사용하여 긁을 수 있습니까? 페이지 소스의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> 

결과 원하는 요소가 각 값을 갖는 벡터이다. 예를 들어, = C를 ('95182', '95183', '95184', '95185'은 "95,186")

숫자의 문자열을 가져도 예상 작업이 예 요소로 분할 될 수있는 것처럼 값 , strsplit 사용.

'value'또는 'option'이있는 getElementAttribute()가 작동하지 않습니다. 예

dd.areas$getElementAttribute('value') 

getElementText()

dd.areas = remDr$findElement(using='id', value="main_ddArea") 
dd.areas$getElementAttribute('option') 

또는 텍스트의 한 문자열, 예컨대, "지역 1/N 영역 2/N 영역 3/N ...."를 찾는다. 그러나 텍스트를 나중에 드롭 다운 목록을 탐색하는 데 사용할 수 없습니다. 즉, $findelement()을 사용하여 드롭 다운 목록을 탐색 할 때 드롭 다운 목록을 채우려면 값이 필요합니다. 텍스트가 작동하지 않습니다.

package documentation에는 드롭 다운 목록에 대한 참조가 포함되어 있지 않으며 vignette도 없습니다.

+0

내가 rselenium''에 익숙하지 않은,하지만 난 당신이 '옵션'요소를 찾으려는 생각 속성을 얻기 위해 자바 스크립트를 사용합니다 ('select' 요소에 반대) '가치'속성을 얻습니다. ID가'main_ddArea' 인'select'의 모든'option' 아이들을 검색하고 (예를 들어'main $ ddArea'를 가지고 있습니까?) 'value'속성을 얻습니다 ('option'속성 아님). –

+0

@ mathematical.coffee'$ getElementAttribute ('option')'에 의해 시도 된 것과 다른 질문이 당신이 제안한 것입니까? 나는 시도 된 것을 명확히하기 위해 질문을 편집했다. 만약 당신이'select' 함수의 사용을 제안했다면, 이전 연구에서 Rselenium은 다른 셀레늄 구현이 제공하는'select' 클래스를 포함하지 않는다는 것을 보여줍니다. –

+0

"option"은 여기에 속성이 아니며 "value"속성을 원하는 태그입니다. –

답변

2

그런 다음 outerHTML을 얻을 select 태그를 대상으로 findElement를 사용하고 결과 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" 

이는 셀레늄 서버 2를 실행하는 경우 표시 게 코 기반 브라우저는 GetAttribute of WebElement in Selenium Firefox Driver Returns Empty을 참조하십시오. 이 경우 당신이

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" 
+0

먼저 규칙을 어기고 큰 감사 인사를 드리겠습니다. 이전에 내 Rsel 질문에 답변했고 다른 게시물은 매우 유용했습니다. –

+0

하지만 코드가 작동하지 않습니다. XML 내용이 XML 될 것 같지 않습니다 : - webElem $ getElementAttribute ("outerHTML에") [[1]] appHTML [1] "1" 문서 <- htmlParse (appHTML) 경고 메시지 나는 appHTML가 <'수 '1' doc [ "// option", fun = function (x) xmlGetAttr (x, "value")] list() 이것은 내 코드에서 얻은 것과 유사합니다. 재미있는 점은 $ getElementText()가 작동한다는 것입니다. 그리고 $ getElementAttribute ("name")이 작동합니다. –

+0

firefox 및 요소 속성에 문제가 있습니다. https://github.com/SeleniumHQ/selenium/blob/master/dotnet/CHANGELOG를 참조하십시오. 그것은 실행중인 firefox 및 selenium 서버 버전에 따라 다릅니다.다른 방법으로 위에서 설명한대로 JavaScript를 사용할 수 있습니다. – jdharrison