【问题标题】:identifying a text in a sentence using xpath使用 xpath 识别句子中的文本
【发布时间】:2014-01-07 15:31:56
【问题描述】:

如何在以下代码中编写 xpath 来识别 07971394283:

<form id="HousingRepairs-confirmation-form" enctype="application/x-www-form-urlencoded" action="/communal-repairs-statuses-subscription/confirm.jsf?cid=1" method="post" name="HousingRepairs-confirmation-form"> 

    <input type="hidden" value="HousingRepairs-confirmation-form" name="HousingRepairs-confirmation-form"> <div class="fieldset-container"> 

    <p>Thank you for completing the communal repairs subscription form.</p> 

    <h3>What happens next?</h3> 
    <p> The mobile number **07971394283** will be added to the relevant subscription list. If you wish to unsubscribe at any time please use our <a id="HousingRepairs-confirmation-form:unSubscribeLink" href="https://contact.camden.gov.uk/unsubscribe-communal-repairs-alerts" name="HousingRepairs-confirmation-form:unSubscribeLink">communal repairs alerts unsubscription form</a>

【问题讨论】:

  • 您到底想找到什么?您是在特别搜索07971394283,试图找到任何 11 位数字的字符串,还是试图找到位于文本中该位置的任何数字字符串?
  • 另外,您可能想尝试阅读How to Ask。只需遵循几条简单的指导原则,您就可以更轻松地获得问题的良好答案。
  • 抱歉格式错误..我正在尝试查找任何 11 位数字的字符串

标签: selenium xpath


【解决方案1】:

这应该可行:

"//p[contains(text(),'07971394283')]"

此 XPath 正在搜索包含 07971394283 的第一段。

编辑:我刚刚注意到需要一串数字而不是具体数字。在这种情况下,AJMansfield 的回应是正确的做法。

【讨论】:

  • 我试过 "//p[contains(text(),'07971394283')]"..但它占用了整个句子。
  • 使用此 xpath 后,只需使用 AJMansfield 建议的正则表达式 \d{11} 获取元素文本
【解决方案2】:

这是不可能的,仅仅因为 Selenium 依赖于浏览器的 XPath 引擎(并且在某些情况下提供了它自己的支持),其中 none 主流浏览器实际上是support XPath 2(常规需要XPath 中的表达式)。

你必须先找到元素,然后证明它里面有你需要的东西(这个问题其他地方发布的正则表达式可以工作)。

【讨论】:

    【解决方案3】:

    为了找到一个十一位数的字符串,使用正则表达式。从最基本到最复杂:

    • \d{11} 将匹配连续的任何 11 位数字。但是,这可能不是所希望的,因为它还会匹配较长序列中的前 11 位数字。如果需要排除更长的数字字符串,请使用不同的解决方案。

    • \D(\d{11})\D 将作为一个整体匹配由非数字字符、11 位数字和另一个非数字字符组成的任何字符串。数字本身将作为第 1 组进行匹配。这种方法的问题是,如果数字位于字符串的开头或结尾,它将无法匹配。如果这是一种可能的情况,还有其他方法可以处理。

    • 如果您的语言支持前瞻/后瞻,您可以使用(?&lt;!\d)\d{11}(?!\d)。这就是说,匹配一个 11 位数字的序列,在它之前或之后没有另一个数字。不幸的是,并非所有工具都支持前瞻/后瞻。

    有关如何将它与 xpath 一起使用的信息,还有许多关于此主题的其他资源:

    【讨论】:

    • 虽然这是对的,但我并不是仅仅因为 XPath v1 不支持正则表达式这一事实而赞成它。他的问题是“我需要什么 XPath 和正则表达式来获取这个元素*,你回答了第二部分但没有回答第一部分 - 其中的答案是这在 XPath 和 Selenium 中是不可能的,因为主要浏览器实际上都没有XPath 2 引擎 - 它们都在使用 XPath 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2019-08-22
    • 2022-01-06
    • 2023-03-23
    相关资源
    最近更新 更多