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