Python을 사용하여 Selenium WebDriver에서 WebElement의 HTML 소스를 가져옵니다.
Python 바인딩을 사용하여 Selenium WebDriver를 실행하고 있습니다.
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용 Selenium WebDriver 문서는 기본적으로 존재하지 않으며 코드에는 해당 기능을 활성화하는 것이 없습니다.
요소(및 그 자식)의 HTML에 액세스하는 가장 좋은 방법은 무엇입니까?
읽으면 요.innerHTML
요소의 콘텐츠 소스를 가져오거나outerHTML
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Python:
element.get_attribute('innerHTML')
자바:
elem.getAttribute("innerHTML");
C#:
element.GetAttribute("innerHTML");
루비:
element.attribute("innerHTML")
JavaScript:
element.getAttribute('innerHTML');
PHP:
$element->getAttribute('innerHTML');
및 은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」ChromeDriver
.
얻을 수 있는 .webelement
자바스크립트Python 바인딩에 대해서는 잘 모르겠지만 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'))
소스 코드가 매우 길기 때문에 파일에 저장하는 것이 좋습니다.
하여 selenium-webdriver(2.32.1)가 .page_source
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
다른 답변에서는 WebElement 마크업을 취득하는 방법에 대해 자세히 설명합니다.그러나 중요한 측면은 현대의 웹사이트들이 DOM 트리 내의 동적 요소를 렌더링하기 위해 JavaScript, ReactJs, jQuery, Ajax, Vue.js, Ember.js, GWT 등을 점점 더 많이 구현하고 있다는 것입니다.따라서 마크업을 취득하기 전에 요소와 그 자식이 완전히 렌더링될 때까지 기다려야 합니다.
파이썬
따라서 이상적으로 WebDriverWait를 유도할 필요가 있습니다.visibility_of_element_located()
다음 중 하나의 로케이터 전략을 사용할 수 있습니다.
「」를 사용합니다.
get_attribute("outerHTML")
:element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id"))) print(element.get_attribute("outerHTML"))
「」를 사용합니다.
execute_script()
:element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id"))) print(driver.execute_script("return arguments[0].outerHTML;", element))
참고: 다음 Import를 추가해야 합니다.
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
속성 방식을 사용하는 것이 실제로 더 쉽고 간단합니다.
및보석과 하여 특정 Selenium page PageObject 보 ruby Ruby sel sel sel 음음 음 음음 음 음 음 음 음 음 음 음 음 음 음 음 음 using using using using using using using using using using using using using using using using using using using 。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();
InnerHTML은 선택한 요소 내부와 외부 요소를 반환합니다.HTML은 선택한 요소와 함께 내부 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
필요에 따라서
Python:
element.get_attribute('innerHTML')
자바:
elem.getAttribute("innerHTML");
전체 페이지 HTML을 사용하려면 다음 코드를 사용하십시오.
driver.getPageSource();
도움이 되었으면 합니다.http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Java 메서드에 대해 설명합니다.
java.lang.String getText()
하지만 안타깝게도 Python에서는 사용할 수 없습니다.따라서 자바에서 파이썬으로 메서드 이름을 변환하여 페이지 소스 전체를 가져오지 않고 현재 메서드를 사용하여 다른 로직을 시도할 수 있습니다.
예.
my_id = elem[0].get_attribute('my-id')
이것은 나에게 심리스하게 작동한다.
element.get_attribute('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")
Python의 Selenium Remote Control 솔루션에 관심이 있으시다면, 여기 이너에 접속하는 방법이 있습니다.HTML:
innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")
PHPUnit Selenium 테스트에서는 다음과 같습니다.
$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');
execute_script get html 사용
bs4(BeautifulSoup)도 html 태그에 빠르게 접근할 수 있습니다.
from bs4 import BeautifulSoup
html = adriver.execute_script("return document.documentElement.outerHTML")
bs4_onepage_object=BeautifulSoup(html,"html.parser")
bs4_div_object=bs4_onepage_object.find_all("atag",class_="attribute")
php-webdriver(1.12.0+)의 현재 버전에서는,
$element->getDomProperty('innerHTML');
다음 호에서 지적된 바와 같이 https://github.com/php-webdriver/php-webdriver/issues/929를 참조하십시오.
PHP Selenium WebDriver에서는 다음과 같은 페이지 소스를 얻을 수 있습니다.
$html = $driver->getPageSource();
또는 다음과 같은 요소의 HTML을 가져옵니다.
// innerHTML if you need HTML of the element content
$html = $element->getDomProperty('outerHTML');
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
이 코드는 소스에서 JavaScript를 가져올 때도 작동합니다.
언급URL : https://stackoverflow.com/questions/7263824/get-html-source-of-webelement-in-selenium-webdriver-using-python
'programing' 카테고리의 다른 글
Linux/CentOS PC의 php.ini 파일은 어디에 있습니까? (0) | 2022.10.07 |
---|---|
Java의 SHA-256을 통한 해시 문자열 (0) | 2022.10.07 |
zeroDateTimeBehavior=hiberToNull이 휴지 상태를 사용하여 jdbc URL에서 작동하지 않습니다. (0) | 2022.10.07 |
phpmyadmin을 사용하여 데이터베이스를 복제하려면 어떻게 해야 합니까? (0) | 2022.10.07 |
ESLint 구문 분석 오류:예기치 않은 토큰 (0) | 2022.10.07 |