programing

Python을 사용하여 Selenium WebDriver에서 WebElement의 HTML 소스를 가져옵니다.

bestcode 2022. 10. 7. 22:31
반응형

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>

라이브 예:

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

아래에는 다른 바인딩에 따라 필요한 구문이 나와 있습니다.를 변경하다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

반응형