一般的な解決策は次のとおりです。
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)
私は実際にこのコードをテストスイートで使用しています。