Programing

Python을 사용하여 Selenium WebDriver에서 WebElement의 HTML 소스 가져 오기

lottogame 2020. 2. 19. 21:21
반응형

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>

라이브 예 :-

http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm

아래에는 다른 바인딩에 따라 필요한 구문이 있습니다. 변경 innerHTMLouterHTML필요에 따라.

파이썬 :

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')

참고 URL : https://stackoverflow.com/questions/7263824/get-html-source-of-webelement-in-selenium-webdriver-using-python



반응형