본문 바로가기
파이썬

파이썬 자식 요소 텍스트를 포함하지 않고 Selenium WebDriver에서 요소의 텍스트를 얻는 방법은 무엇입니까?

by º기록 2021. 2. 7.
반응형
<div id="a">This is some
   <div id="b">text</div>
</div>

"This is some"을 얻는 것은 중요하지 않습니다. 예를 들어 "This is some text"를 반환합니다.

driver.find_element_by_id('a').text

일반적으로 자식의 텍스트를 포함하지 않고 특정 요소의 텍스트를 얻는 방법은 무엇입니까?

(저는 아래에 답변을 제공하고 있지만 누군가가 덜 끔찍한 해결책을 제시 할 수있는 경우 질문을 열어 두겠습니다).

 

해결 방법

 

일반적인 해결책은 다음과 같습니다.

def get_text_excluding_children(driver, element):
    return driver.execute_script("""
    return jQuery(arguments[0]).contents().filter(function() {
        return this.nodeType == Node.TEXT_NODE;
    }).text();
    """, element)

함수에 전달 된 요소는 find_element ... () 메소드에서 가져올 수 있습니다 (즉, WebElement 객체 일 수 있음).

또는 jQuery가 없거나 사용하고 싶지 않다면 위의 함수 본문을 다음과 같이 바꿀 수 있습니다.

return self.driver.execute_script("""
var parent = arguments[0];
var child = parent.firstChild;
var ret = "";
while(child) {
    if (child.nodeType === Node.TEXT_NODE)
        ret += child.textContent;
    child = child.nextSibling;
}
return ret;
""", element) 

실제로 테스트 스위트에서이 코드를 사용하고 있습니다.

 

참조 페이지 https://stackoverflow.com/questions/12325454

 

 

반응형

댓글