仅使用Selenium选择父元素文本

时间:2016-04-05 18:09:05

标签: python selenium

我使用Python脚本使用Selenium库从网站中提取信息。 使用一些选择器,我得到了一个目标元素的WebElement对象,之后看起来如下所示:

<myTargetElement><strong>324. </strong>Some interesting content that might contain numbers 323 or dots ...,;</myTargetElement>

我想分开提取两条信息:

strong标记包围的ID,我已完成以下操作:

myTargetElementObject.find_element_by_tag_name('strong').text.strip(' .')

现在我很困惑如何提取其他部分。如果我使用myTargetElementObject.text,它将在文本中返回id。

我提取的数据非常大,我对使用正则表达式持谨慎态度。有没有办法使用WebElement对象返回没有子元素的元素文本?

1 个答案:

答案 0 :(得分:2)

我会得到目标元素的完整文本并将其拆分为第一个.

strong, rest_of_the_content = myTargetElementObject.text.split(". ", 1)

总的来说,任务并不那么容易(这里你有一个明确的分隔符):你不能直接在selenium中定位和获取文本节点 - 比如following-sibling::text()。一种常见的方法是获取子文本,父文本并从父文件中删除子文本:

另一种可能的方法是使用BeautifulSoup进行一些单独的HTML解析,您可以在其中横向移动并访问文本节点:

from bs4 import BeautifulSoup

html = myTargetElementObject.get_attribute("outerHTML")
soup = BeautifulSoup(html, "html.parser")
label = soup.strong
text_after = label.next_sibling

print(label.get_text(), text_after)