【问题标题】:Need generic xpath for the following html code以下html代码需要通用xpath
【发布时间】:2017-04-27 00:17:23
【问题描述】:

以下是我需要唯一 XPath 的 HTML 代码。

<fieldset>
<legend>Type</legend>
<input id="applyremotewhite" name="rvaluetype" checked="checked"     value="white" type="radio">
<label for="applyremotewhite">White List</label>
<br>
<br>
<input id="applyremoteblack" name="rvaluetype" value="black" type="radio">
<label for="applyremoteblack">Black List</label>
</fieldset>
<fieldset>

我需要像 [@label = 'White List'] 这样的东西,这样我就不需要在我的代码中编写多个 xpath。我想从函数中传递诸如白名单和黑名单之类的值。

【问题讨论】:

  • 这是 HTML。为什么不使用 BeautifulSoup?
  • 我对此很陌生。将阅读有关 BeautifulSoup 的信息。
  • 如果您是新手,那么您是如何知道 XPath 是什么的,或者您认为为什么需要它?
  • @SaurabhThakkar 如果您使用 beatifulsoup,那么您可以在 fieldset 内选择 label,其中 for 属性是 applyremotewhite,然后在该标签内选择 text

标签: python xpath html-parsing


【解决方案1】:

@label 引用属性而不是文本节点。您要参考文本内容。例如。您应该使用fieldset/label[text() = 'White List'] 找到带有此文本的标签。

【讨论】:

  • 它的字段集不是文件集
  • 我对此很陌生。您建议的答案无效。
  • 我按照您的建议更正了拼写错误,它有效。但是,选择的节点不是唯一的。 Firebug 说它找到了 3 个与您建议的 xpath 匹配的节点。
  • @Mohammad Yusuf Ghazi:谢谢,我已经更正了这个词。
【解决方案2】:

如果返回多个匹配节点,您可以使用如下索引来获取预期节点。

(label[text() = 'White List'])[N]

'N' 将是您要处理的节点的索引。

【讨论】:

  • 尽管使用了像 (label[text() = 'White List'])[1] 这样的索引,它仍然说找到了 2 个匹配节点
  • 索引不可能返回多个元素,您可能没有在 xpath 字符串前后添加 () 圆括号。
  • (//label[text() = '白名单'])[1]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多