Python 如何在Selenium的XPath选择器中选择所有子文本,但不包括标记?

Python 如何在Selenium的XPath选择器中选择所有子文本,但不包括标记?,python,html,selenium,xpath,selenium-webdriver,Python,Html,Selenium,Xpath,Selenium Webdriver,我有这个html: <div id="content"> <h1>Title 1</h1><br><br> <h2>Sub-Title 1</h2> <br><br> Description 1.<br><br>Description 2. <br><br> <h2>Sub-Ti

我有这个html:

<div id="content">
    <h1>Title 1</h1><br><br>

    <h2>Sub-Title 1</h2>
    <br><br>
    Description 1.<br><br>Description 2.
    <br><br>

    <h2>Sub-Title 2</h2>
    <br><br>
    Description 1<br>Description 2<br>
    <br><br>

    <div class="infobox">
        <font style="color:#000000"><b>Information Title</b></font>
        <br><br>Long Information Text
    </div>
</div>
我可以在online XPath tester中使用以下代码:

//div[@id="content"]/descendant::text()[not(ancestor::div/@class="infobox")]
但是如果我通过xpath将代码传递给Seleniu的find_元素,我将得到selenium.common.exceptions.InvalidSelectorException

内部使用的xpath必须指向元素,而不是文本节点和属性

这里最简单的方法是找到父标记,找到要排除的文本的子标记,并从父文本中删除子文本:

parent = driver.find_element_by_id('content')
child = parent.find_element_by_class_name('infobox')
print parent.text.replace(child.text, '')

回答得好!我知道你提到这是最简单的。但是xpath可以为此编写吗?@Saifur谢谢,它可以,尽管find_element_by_xpath不能用于此。我认为的另一个选择是使用js计算xpath并执行_脚本。
result = driver.find_element_by_xpath('//div[@id="content"]/descendant::text()[not(ancestor::div/@class="infobox")]')
parent = driver.find_element_by_id('content')
child = parent.find_element_by_class_name('infobox')
print parent.text.replace(child.text, '')