【问题标题】:xpath text within a span within text within a divdiv 内的文本内的跨度内的 xpath 文本
【发布时间】:2020-09-08 22:53:38
【问题描述】:

我正在拼命地从一个跨度中提取文本,该跨度在一个 div 内的文本内(在图像中带下划线)

这是代码的相关部分...

<div id="groupBlock3">
  <div class="groupBlockTitle">
    ::before
    "
                      ALL TEACHERES ("
    <span class="activeTeachers">12</span>
    " ACTIVE, "
    <span class="archivedTeachers">1</span>
    " ARCHIVED)
                    "
    <div>...</div>
    <div>+ enroll a teacher</div>
  </div>
  <div>...</div>
</div>

我可以用这个...从第一个 div 中检索文本...

"normalize-space(//div[@id='groupBlock3']/div[1])"

...这给了我...

'ALL TEACHERES ( ACTIVE, ARCHIVED) + enroll a teacher'

...但是,尽我所能,我无法从第一个或第二个跨度中获取文本 - 它只返回一个空字符串。请帮帮我!!

【问题讨论】:

  • 您是否尝试使用浏览器开发工具获取 xpath? duckduckgo.com/?t=lm&q=get+xpath+from+chrome&ia=web
  • 我做了,但它也是一样的——这就是开发工具告诉我的...//*[@id="groupBlock3"]/div[1]/span[1]...它给了我 span 元素参考但是当我在之后添加/text()它,什么都没有;空列表。
  • 不确定这是否与::before有关?

标签: html xpath


【解决方案1】:

尝试以下 XPath-1.0 表达式之一:

normalize-space(//div[@id='groupBlock3']/div[1]/span[1]/text())

导致12,或者,第二个span

normalize-space(//div[@id='groupBlock3']/div[1]/span[2]/text())

导致1


但是如果你想要第一个div的所有文本,使用这个表达式

normalize-space(string(//div[@id='groupBlock3']/div[1]))

给你结果

::before " ALL TEACHERES (" 12 " ACTIVE, " 1 " ARCHIVED) " ...+ 注册教师

【讨论】:

  • 感谢您的建议,但它不起作用......我想知道这是否与我无法公开分享的(非常长的)网页的其余部分有关......
  • 可能 HTML 是通过 JavaScript 动态生成/加载的。
  • 这是可能的:(
  • 是的 - 正是这种情况 - 页面中的 javascript 比动态生成所有内容的 HTML 更多 - 我假设您无法使用 xpath 访问 js 变量值?
  • 我不知道怎么做。您必须以某种方式访问​​完全加载的页面(在浏览器中!?),然后您可以使用 XPath。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2014-09-23
相关资源
最近更新 更多