gpt4 book ai didi

java - Xpath - 使用多个属性和部分文本的复合语句

转载 作者:行者123 更新时间:2023-12-02 01:00:49 26 4
gpt4 key购买 nike

我正在尝试获取 a网页上的链接,我知道元素的类名,但表中每一行的标题不同。

例如。A 行可能看起来像 <a href='/someaddress' class='constantClassName' title='AlwaysPresentText - Row <somenumberhere_oneormoredigits> - TextIKnowAheadOfTime'>Edit</a>

在 Chrome 开发工具中我有 //a[@class='constantClassName' and contains(text(),'Edit') and starts-with(@title,'Edit')]这让我大部分时间都到了那里。

我似乎无法开始工作的是附加 ends-with(@title,'TextIKnowAheadOfTime')上类。在我的用例中,contains(text(),'sometext')可能会返回多个结果,因此我需要完全匹配。

在这里使用Java,并且使用Java正则表达式与我想要的字符串连接是最快的方法,或者是否有一种xpath查询方法可以通过ends-with()的精确匹配来获取单个结果。 ?

最佳答案

This SO answer指出,

By default, selenium uses the "native" version of XPath that comes with the browser. You can make it use a version that comes with Selenium, written in JavaScript. This seems to implement XPath 1.0, based on glancing at the source.

答案已经很旧了,但即使到现在,浏览器也不支持 XPath-2.0。这是相关的,因为 fn:ends-with(...)XPath-2.0 function .

但是您可以使用以下 XPath-1.0 组合来模拟它。这里,.是要比较的值,$ending是字符串“结尾”的字符串。

substring(., string-length(.) - string-length($ending) + 1) = $ending
<小时/>

适用于您的情况,XPath-1.0 等效于

ends-with(@title,'TextIKnowAheadOfTime')

substring(@title, string-length(@title) - string-length('TextIKnowAheadOfTime') + 1) = 'TextIKnowAheadOfTime'

我想现在你可以让你的表达式匹配你想要的节点。

关于java - Xpath - 使用多个属性和部分文本的复合语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60676472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com