[python] 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 소스 코드를 얻는 간단한 방법은 없습니다 webelement. 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")

파일로 저장하려면 다음을 수행하십시오.

with open('c:/html_source_code.html', 'w') as f:
    f.write(source_code.encode('utf-8'))

소스 코드가 매우 길기 때문에 파일에 저장하는 것이 좋습니다.


답변

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();