如何单击其href在Selenium中具有某个子字符串的链接?

Posted

技术标签:

【中文标题】如何单击其href在Selenium中具有某个子字符串的链接?【英文标题】:How to click a link whose href has a certain substring in Selenium? 【发布时间】:2013-10-04 05:10:57 【问题描述】:

以下是一堆链接<a elements.只有一个有一个子字符串“long”作为属性href的值

<a class="c1" href= "very_lpng string" > name1 </a>
<a class="g2" href= "verylong string" > name2 </a>   // The one that I need
<a class="g4" href= "very ling string" > name3 </a>
<a class="g5g" href= "very ng string" > name4 </a>

...................

我需要点击href 中包含子字符串“long”的链接。我该怎么做?

PS: driver.findElement(By.partialLinkText("long")).click(); // b/c 它按名称选择

【问题讨论】:

你为什么要在这个问题上提出另一个问题?您在三个小时前问了同样的问题:***.com/questions/19055327/… 对不起,我想把上一个问题删掉,再开一个新的,这样我就可以更清楚地表达自己了……这个问题值得关注,因为它并不容易看起来 但显然我无法删除上一个问题。上一个问题已经有答案(不正确) 对于这样的事情,最好使用 xpath,尽管我不能 100% 确定我的 xpath 是否正确:driver.findElement(By.xpath("//@href[contains(text(), 'long'.)]).click(); 谢谢 我试过这个方法。不幸的是它不起作用 【参考方案1】:

在 xpath 定位器的帮助下,你也可以达到同样的效果。

你的陈述是:

driver.findElement(By.xpath(".//a[contains(@href,'long')]")).click();

并且对于单击 URL 中包含 long 的所有链接,您可以使用:-

List<WebElement> linksList = driver.findElements(By.xpath(".//a[contains(@href,'long')]"));

for (WebElement webElement : linksList)
         webElement.click();

【讨论】:

【参考方案2】:

你可以这样做:

//first get all the <a> elements
List<WebElement> linkList=driver.findElements(By.tagName("a"));

//now traverse over the list and check
for(int i=0 ; i<linkList.size() ; i++)

    if(linkList.get(i).getAttribute("href").contains("long"))
    
        linkList.get(i).click();
        break;
    

在此我们要做的是首先找到所有&lt;a&gt; 标签并将它们存储在list.After 中,我们将逐个迭代列表以找到其href 属性包含长字符串的&lt;a&gt; 标签。然后我们点击那个特定的&lt;a&gt; 标签并退出循环。

【讨论】:

在此我们要做的是首先我们找到所有的 标签并将它们存储在一个列表中。之后我们将逐个迭代列表以找到 标签的 href属性包含长字符串。然后我们点击那个特定的 标签并退出循环。 欢迎来到 Stack Overflow!请考虑为您的答案添加一些解释,而不仅仅是代码。我们的目标是教育人们,使他们理解答案并可以将其应用于其他情况。如果您评论您的代码并添加解释,您的回答不仅对这次提出问题的人更有帮助,而且对将来可能遇到同样问题的任何人都有帮助。【参考方案3】:

我需要点击href 中包含子字符串“long”的链接。我该怎么做?

借助 CSS 选择器的美感。

你的陈述是……

driver.findElement(By.cssSelector("a[href*='long']")).click();

这意味着,在英语中,

找到任何具有href 属性和该属性contains 'long' 的'a' 元素

您可以找到一篇有用的文章,了解如何有效地制定您自己的选择器以实现自动化,以及所有其他相等运算符的列表。 containsstarts with 等...您可以在以下位置找到:http://ddavison.io/css/2014/02/18/effective-css-selectors.html

【讨论】:

【参考方案4】:

使用driver.findElement(By.partialLinkText("long")).click();

【讨论】:

感谢您的回答。但是,这只有在我在链接名称中查找子字符串时才有效。如果要在 href 中查找子字符串,这将不起作用 链接文本是显示的文本。这个答案不起作用,因为给出的唯一链接文本是 'name1','name2','name3','name4'。

以上是关于如何单击其href在Selenium中具有某个子字符串的链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何单击使用 Selenium WebDriver 隐藏的元素?

Python Selenium bot 查看 Instagram 故事 |如何单击具有活跃故事的人的个人资料?

Selenium(Python):单击按钮后,等待所有新元素(可以具有不同的属性)被加载[重复]

在带有 selenium 的 python 中,如何轮换 IP 地址?

如何使用selenium和python创建具有相同xpath的元素列表?

如何使用来自具有特殊设置的网站的Selenium从下拉列表中选择值 - Python