python - Python Selenium 从父级拉取子级属性?
问题描述
我正在尝试为特定字段中的文本抓取 Web 表单,但是我无法使用 xpath 执行此操作,因为某些表单缺少在加载时不会包含在页面中的字段(即,如果 /html/blah/blah/ p[3] 是一个表单的首字母字段,它可能是另一个表单上的名字,但具有相同的 xpath。字段的结构是这样的:
<p><strong>Initials:</strong> WT</p>
因此,我正在使用 python selenium
driver.find_element_by_xpath("//*[contains(text(), 'Initials:')]")
成功地在强标签之间拉出“首字母:”文本,但我特别需要它后面的子文本,在这种情况下是 WT。它具有包含 WT 值的属性“nextSibling.data”,但从我的谷歌搜索来看,我认为不可能用 python selenium 提取该属性。有谁知道在 xpath 查询之后提取 WT 文本的方法?
解决方案
'WT' 文本位于一个奇怪的位置。我不认为它实际上是一个兄弟姐妹本身。我知道抓取该文本的唯一方法是使用p_element.get_attribute('outerHTML')
,在这种情况下应该抓取字符串'<p><strong>Initials:</strong> WT</p>'
。我怀疑这是最干净的解决方案,但这是一种解析文本的方法:
strong_close_tag = '</strong>'
p_close_tag = '</p>'
p_element = driver.find_element_by_xpath("//*[contains(text(), 'Initials:')]/parent")
print(p_element.get_attribute('outerHTML')[text.index(strong_close_tag)+len(strong_close_tag):text.index(p_close_tag)])
或 -使用p_element.get_attribute('innerHTML')
,它应该只返回<strong>Initials:</strong> WT
. 然后,类似地,抓取</strong>
关闭标签后的文本,可能是这样的:
p_element = driver.find_element_by_xpath("//*[contains(text(), 'Initials:')]/parent")
print p_element.get_attribute('innerHTML').split("</strong>",1)[1]
推荐阅读
- javascript - 如何在 javascript 中将 jQuery 的值分配给 PHP SESSION
- c# - 为什么要创建父类的类型来存储子类的对象?
- python - 我们可以将 fastText 与 SVM 一起集成吗?
- javascript - 在nodejs中通过带有构造函数的模块公开多个对象
- go - 如何在 Go 语言的模板中获取嵌入变量
- java - 本机库 D:\jdk 1.8.0 181\jre1.8.0_181\bin\glass.dll 已在另一个类加载器中加载
- actions-on-google - 启用智能显示器
- docker - 无法从 Jenkins 管道连接远程 docker 主机 api
- java - Android:将 CheckBox 状态存储在不同日期的 CheckList 中
- javascript - JS 创建 babel 插件:如何获取匿名函数的参数