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'))
참고 문서