Python

[Selenium] Element 텍스트 읽기

비번변경 2021. 9. 15. 19:24

selenium에서 특정 Element의 텍스트 값을 읽는 방법을 적어둔다. 크롬 드라이버 기준이다.

 

text

기본적으로 특정 Element의 텍스트 값을 읽을 때는 text 함수를 호출한다. text 함수는 엘리먼트의 text property를 읽는다.

text = driver.find_element_by_xpath('').text


## 구현부
    def text(self):
        """The text of the element."""
        return self._execute(Command.GET_ELEMENT_TEXT)['value']

하지만 엘리먼트 내에 문자가 존재함에도 불구하고 빈 문자열을 반환하는 경우도 존재한다. 요소에 text property가 없어서 다른 속성에 값이 설정되어 있기 때문인 듯하다.

 

get_attribute()

get_attribute 함수는 매개변수로 지정된 element의 속성을 읽는다. 이 중 엘리먼트 내 문자열에 해당하는 속성은 innerText 정도인 것 같다. get_attribute로는 텍스트뿐만 아니라 href, src 등의 속성도 얻을 수 있다.

text = driver.find_element_by_xpath('').get_attribute('innerText')
text = driver.find_element_by_xpath('').get_attribute('innerHTML')

text 보다는 get_attribute('innerText')가 일반적으로 모든 경우를 처리한다고 한다.

 

아래에 두 함수의 실행 결과를 캡처해둔다.

from selenium import webdriver

driver_path = 'D:\projects\selenium_test\driver\chromedriver.exe'
driver = webdriver.Chrome(driver_path)

url = "https://passwd.tistory.com/122"
driver.get(url)

print(driver.find_element_by_xpath('//*[@id="container"]/main/div/div[2]/div[2]/div/table/tbody/tr[2]/td[2]').text)
print(driver.find_element_by_xpath('//*[@id="container"]/main/div/div[2]/div[2]/div/table/tbody/tr[2]/td[2]').get_attribute('innerText'))
print(driver.find_element_by_xpath('//*[@id="container"]/main/div/div[2]/div[2]/div/table/tbody/tr[2]/td[2]').get_attribute('innerHTML'))

텍스트 속성 읽기

 

참고 문서

https://stackoverflow.com/questions/40416048/difference-between-text-and-innerhtml-using-selenium/55902072#55902072