我正在尝试提取包含特定文本的b标签后面的文本值。我正在使用Selenium Web驱动程序和Python3。
下面是为我试图返回的值(11,847)检查的HTML:
下面有一个Xpath(我没有直接使用这个xpath来查找元素,因为我计划迭代的不同示例的表结构会发生变化):/html/body/form[1]/div[2]/table[2]/tbody/tr[3]/td[2]/text()
例如,当我打印下面的代码时,它返回Att:即,通过我在b标记内搜索文本"Att"而定位的元素。att=driver.find_element("xpath",".//b[contains(text(), 'Att')]").text
print(att)
有没有一种方法可以通过搜索'Att:'返回<b>Att:</b>
后面的值(或者反过来,我也想返回<b>Ref:</b>
后面的值)?
先谢了。
3条答案
按热度按时间liwlm1x91#
11,847
文本内容属于td
节点。可以通过
b
子元素b
文本内容来定位td
元素。然后,您将能够检索该
td
节点的整个文本内容。它将包含
Att:
和额外的空格以及所需的11,847
字符串。现在,您需要删除
Att:
和多余的空格,这样只会保留11,847
。具体如下:
5t7ly7z52#
可以使用find_element_by_xpath()方法定位包含文本'Att:'的元素,然后再次使用find_element_by_xpath()方法定位以下文本节点。下面是如何执行此操作的示例:
这将定位包含文本'Att:'的元素,然后定位下面的文本节点,并返回该节点的文本值。
同样,您可以为“Ref:”使用相同的xpath,也可以将文本部分更改为“Ref:”
请注意,只有当您尝试提取的文本值紧跟在文本节点中包含“Att:”或“Ref:”的元素之后时,此操作才有效。
vs91vp4v3#
以下
xpath
将导致错误:因为Selenium只返回WebElement而不返回对象。
溶液
文本
11,847
位于作为<td>
节点的第二个子节点的文本节点中。因此,要打印文本,必须引发WebDriverWait等待visibility_of_element_located()
,并且可以使用以下locator strategies之一:splitlines()
:*注意:您必须添加以下导入: