Python을 사용하여 Selenium WebDriver에서 WebElement의 HTML 소스 가져 오기
Selenium WebDriver를 실행하기 위해 Python 바인딩을 사용하고 있습니다.
from selenium import webdriver
wd = webdriver.Firefox()
나는 웹 요소를 이렇게 잡을 수 있다는 것을 알고있다 ...
elem = wd.find_element_by_css_selector('#my-id')
그리고 나는 전체 페이지 소스를 얻을 수 있다는 것을 알고있다 ...
wd.page_source
그러나 "요소 소스"를 얻을 수있는 방법이 있습니까?
elem.source # <-- returns the HTML as a string
Python의 셀레늄 웹 드라이버 문서는 기본적으로 존재하지 않으며 해당 기능을 가능하게하는 것으로 보이는 코드는 없습니다.
요소 (및 그 하위 요소)의 HTML에 액세스하는 가장 좋은 방법에 대한 생각이 있습니까?
당신은 읽을 수 innerHTML
의 소스 얻을 속성을 컨텐츠 요소 또는 outerHTML
소스 와 현재 요소를.
파이썬 :
element.get_attribute('innerHTML')
자바:
elem.getAttribute("innerHTML");
씨#:
element.GetAttribute("innerHTML");
루비:
element.attribute("innerHTML")
JS :
element.getAttribute('innerHTML');
PHP :
$element->getAttribute('innerHTML');
테스트하고와 함께 작동합니다 ChromeDriver
.
웹 요소의 html 소스 코드를 얻는 간단한 방법은 없습니다. JS를 사용해야합니다. 파이썬 바인딩에 대해서는 확신이 없지만 Java에서는 쉽게 이와 같이 할 수 있습니다. JavascriptExecutor
파이썬 에는 클래스 와 비슷한 것이 있어야합니다 .
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
물론 Selenium Python에서 아래 스크립트를 사용하여 모든 HTML 소스 코드를 얻을 수 있습니다.
elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")
파일로 저장하려면 다음을 수행하십시오.
f = open('c:/html_source_code.html', 'w')
f.write(source_code.encode('utf-8'))
f.close()
소스 코드가 매우 길기 때문에 파일에 저장하는 것이 좋습니다.
Ruby에는 selenium-webdriver (2.32.1)를 사용 page_source
하여 전체 페이지 소스를 포함 하는 메소드가 있습니다.
실제로 속성 방법을 사용하는 것이 더 쉽고 간단합니다.
Selenium 및 PageObject gem과 함께 Ruby를 사용하여 특정 요소와 연관된 클래스를 얻으려면 행은입니다 element.attribute(Class)
.
다른 속성을 요소에 연결하려는 경우에도 동일한 개념이 적용됩니다. 예를 들어, 요소의 문자열을 원하면 element.attribute(String)
.
구식으로 보이지만 어쨌든 여기에 두십시오. 귀하의 경우에 올바른 방법 :
elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)
또는
html = elem.get_attribute('innerHTML')
둘 다 나를 위해 일하고 있습니다 (selenium-server-standalone-2.35.0)
셀레늄 2.53.0을 가진 자바
driver.getPageSource();
이것이 도움이되기를 바랍니다 : http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
다음은 Java 메소드에 대한 설명입니다.
java.lang.String getText()
그러나 불행히도 파이썬에서는 사용할 수 없습니다. 따라서 메소드 이름을 Java에서 Python으로 변환하고 전체 페이지 소스를 얻지 않고 현재 메소드를 사용하여 다른 논리를 시도 할 수 있습니다 ...
예 :
my_id = elem[0].get_attribute('my-id')
InnerHTML은 선택한 요소 내부의 요소를 반환하고 outerHTML은 선택한 요소와 함께 HTML 내부를 반환합니다
예 :-이제 요소가 다음과 같다고 가정하십시오.
<tr id="myRow"><td>A</td><td>B</td></tr>
innerHTML 요소 출력
<td>A</td><td>B</td>
outerHTML 요소 출력
<tr id="myRow"><td>A</td><td>B</td></tr>
라이브 예 :-
아래에는 다른 바인딩에 따라 필요한 구문이 있습니다. 변경 innerHTML
에 outerHTML
필요에 따라.
파이썬 :
element.get_attribute('innerHTML')
자바:
elem.getAttribute("innerHTML");
전체 페이지 HTML을 아래 코드에서 사용하려면 :-
driver.getPageSource();
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
이 코드는 실제로 소스에서 JavaScript를 가져 오는 데 효과적입니다!
그리고 PHPUnit 셀레늄 테스트에서 다음과 같습니다.
$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');
Python의 Remote Control 솔루션에 관심이 있다면 innerHTML을 얻는 방법은 다음과 같습니다.
innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")
내가 선호하는 렌더링 된 HTML을 얻는 방법은 다음과 같습니다.
driver.get("http://www.google.com")
body_html = driver.find_element_by_xpath("/html/body")
print body_html.text
그러나 위의 방법은 모든 태그를 제거하고 (예 : 중첩 된 태그도) 텍스트 내용 만 반환합니다. HTML 마크 업을 얻는 데 관심이 있다면 아래 방법을 사용하십시오.
print body_html.getAttribute("innerHTML")
이것은 나에게 완벽하게 작동합니다.
element.get_attribute('innerHTML')
'Programing' 카테고리의 다른 글
Android 튜토리얼의 대부분의 필드 (클래스 멤버)가 왜 m으로 시작합니까? (0) | 2020.02.19 |
---|---|
매개 변수 이름 반영 : C # 람다 식 남용 또는 구문 광택? (0) | 2020.02.19 |
"예기치 않은 토큰 o"오류를 발생시키는 JSON 구문 분석 (0) | 2020.02.19 |
LESS-CSS 덮어 쓰기 calc () 비활성화 (0) | 2020.02.19 |
<와>는 무엇을 의미합니까? (0) | 2020.02.19 |