HTML 的 XPath,只需要那些带有特定单词的元素
Posted
技术标签:
【中文标题】HTML 的 XPath,只需要那些带有特定单词的元素【英文标题】:XPath for HTML, only those elements with certain words needed 【发布时间】:2021-04-24 10:07:21 【问题描述】:我有这个 html 文档,
我想在无头 Chrome 中使用 XPath 来模拟点击所有 PDF 链接。
为此,我应该找到所有包含以下内容的“href”:文档,budget-2020-21 OR budget-2020-2021
也以 .pdf 结尾
这是一个 HTML 标记示例:
<a href="https://www.website.com/documents/7-2045/budget-address-budget-2020-21-en.pdf"
<a href="https://www.website.com/documents/7-2045/crown-corporation-business-plans-budget-2020-21-en.pdf"
<a href="https://www.website.com/documents/7-2045/estimates-supplementary-detail-budget-2020-21-en.pdf"
<a href="https://www.website.com/documents/7-2045/budget-2020-21-government-business-plan.pdf"
<a href="https://www.website.com/documents/7-2045/highlights-budget-2020-21-en.pdf"
<a href="https://www.website.com/documents/7-2045/presentation-slides-budget-2020-21-en.pdf"
<a href="https://www.website.com/sites/default/files/documents/6-2046/ftb-bfi-041-en-budget-2020-2021.pdf">
我使用了这个 XPath 表达式:
//*[contains(@href,’budget-2020-21 OR budget-2020-2021’)]
似乎 OR 没有正确使用。请帮忙。
【问题讨论】:
【参考方案1】:您的 XPath 正在选择属性值包含子字符串 'budget-2020-21 OR budget-2020-2021'
的所有元素。
如果您希望所有元素的属性值都包含子字符串,'budget-2020-21'
或 'budget-2020-2021'
//*[contains(@href,'budget-2020-21') or contains(@href,'budget-2020-2021')]
还请注意,您必须使用单引号 '
或双引号 "
字符来分隔字符串文字,而不是重音 ’
,就像您在问题中的 XPath 中所使用的那样。
另见
XPath testing that string ends with substring?【讨论】:
抱歉,您的 Xpath 表达式似乎没有突出显示那些 pdf 链接: //*[contains(@href,'budget-2020-21') 或 contains(@href,'budget-2020 -2021')] 它肯定会选择那些a
元素,一旦你将它们修复为格式良好。 (向右滚动查看您发布的a
元素缺少>
和</a>
。)然后,您应该能够添加[ ]
过滤器以要求以".pdf"
结尾,使用方法-到我提供的链接。
如果解决了您的问题,请accept这个答案。如果没有,请具体跟进,以便解决任何未解决的问题。谢谢。
@kjhughes 你的答案看起来是正确的,所以这就是我在一月份支持它的原因。我决定开始接受你对我的回答的最后评论的立场。
@Lifeiscomplex:感谢您的支持,但我很困惑:tursunWali 是您的另一个帐户吗? (如果没有,我想知道你为什么要在这里回复。)如果它解决了问题,我正在指导 tursunWali 接受这个答案,或者在后续评论中解释如果未解决问题将如何仍然存在。以上是关于HTML 的 XPath,只需要那些带有特定单词的元素的主要内容,如果未能解决你的问题,请参考以下文章
Python selenium xpath,在正确地复制/保存特定类元素内的html和文本时遇到麻烦