我有这个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>
我希望在Selenium的 find_element_by_xpath 函数中获取<div id="content">
中的所有文字,但不包括<div class="infobox">
的内容,因此预期结果如下:
Title 1
Sub-Title 1
Descripton 1.
Descripton 2.
Sub-Title 2
Descripton 1.
Descripton 2.
我可以通过在线XPath测试程序中使用此代码来获取它:
//div[@id="content"]/descendant::text()[not(ancestor::div/@class="infobox")]
但是如果我将代码传递给selenium的find_element_by_xpath,我会得到selenium.common.exceptions.InvalidSelectorException
。
result = driver.find_element_by_xpath('//div[@id="content"]/descendant::text()[not(ancestor::div/@class="infobox")]')
答案 0 :(得分:4)
find_element_by_xpath()
中使用的xpath必须指向一个元素,而不是文本节点而不是属性。
这里最简单的方法是找到父标记,找到要排除哪个文本的子标记,并从父文本中删除子文本:
parent = driver.find_element_by_id('content')
child = parent.find_element_by_class_name('infobox')
print parent.text.replace(child.text, '')