当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium X-Path找到所有包含“下载”一词的元素?

穆劲
2023-03-14

我正在使用Selenium进行一些Webscraphing操作,现在我想在链接文本、按钮文本、元素id、元素classhref中找到用户可以单击的所有元素,这些元素包含单词“download”(任何大写)。这可以包括链接、按钮或任何其他元素。

在这个答案中,我找到了一个xpath供那些寻找xpath的人搜索基于特定文本(或不区分大小写和部分匹配)的按钮:

text = 'download'
driver.find_elements_by_xpath("(//*[contains(text(), 'download')]")

但在此页面上,即使有以下链接,也不会返回任何结果:

<a id="downloadTop" class="navlink" href="javascript:__doPostBack('downloadTop','')">Download</a>

有没有人知道我如何找到所有的元素,以某种方式包含“下载”一词在一个网站?

[编辑]此问题被标记为一个问题的副本,该问题得到的答案建议将其更改为“//*[text()[contains(.,'download')]]”。于是我尝试了以下几点:

>>> from selenium import webdriver
>>> d = webdriver.Firefox()
>>> link = 'https://www.yourticketprovider.nl/LiveContent/tickets.aspx?x=492449&y=8687&px=92AD8EAA22C9223FBCA3102EE0AE2899510C03E398A8A08A222AFDACEBFF8BA95D656F01FB04A1437669EC46E93AB5776A33951830BBA97DD94DB1729BF42D76&rand=a17cafc7-26fe-42d9-a61a-894b43a28046&utm_source=PurchaseSuccess&utm_medium=Email&utm_campaign=SystemMails'
>>> d.get(link)
>>> d.find_elements_by_xpath("//*[text()[contains(.,'download')]]")
[]  # As you can see it still doesn't get any results..
>>>

有没有人知道我如何获得用户可以单击的所有元素,并且在链接文本、按钮文本、元素id、元素classhref中包含单词“下载”?欢迎所有提示!

共有1个答案

诸葛乐逸
2023-03-14

试试看:

//*[(@id|@class|@href|text())
       [contains(translate(.,'DOWNLOAD','download'), 'download')]]

此Xpath 1.0表达式选择:具有idclasshref属性或text-node子元素的所有元素,其字符串值包含字符串“download:以任何大写形式表示。

这里有一个运行的证据。下面的XSLT转换用于计算XPath表达式并将所有选定的节点复制到输出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:copy-of select=
    "//*[(@id|@class|@href|text())
       [contains(translate(.,'DOWNLOAD','download'), 'download')]]
    "/>
  </xsl:template>
</xsl:stylesheet>
<html>
  <a id="downloadTop" class="navlink" 
    href="javascript:__doPostBack('downloadTop','')">Download</a>
  <b id="y" class="x_downLoad"/>
  <p>Nothing to do_wnLoad</p>
  <a class="m" href="www.DownLoad.com">Get it!</a>
  <b>dOwnlOad</b>
</html>
<a id="downloadTop" class="navlink" href="javascript:__doPostBack('downloadTop','')">Download</a>
<b id="y" class="x_downLoad"/>
<a class="m" href="www.DownLoad.com">Get it!</a>
<b>dOwnlOad</b>
 类似资料:
  • 问题内容: 我正在使用Selenium进行一些网络抓取,现在我想找到用户可以单击并在链接文本,按钮文本,element ,元素中包含“下载”字样(大写)的所有元素。元素或。这可以包括链接,按钮或任何其他元素。 在这个答案中,我找到了一个xpath,供某人在某个xpath中基于特定文本(或不区分大小写和部分匹配)搜索按钮来搜索: 但是即使该页面上有以下链接,在此页面上也不会返回任何结果: 有人知道如

  • 问题内容: By Company   我需要捕获上述元素的xpath。我尝试了以下替代方法,但在Chrome中似乎没有任何效果。您能否建议其他选择。 问题答案: 要查找元素: 您可以使用以下xpath之一: 使用: 使用: 但是,理想情况下,您可能希望避免使用 NO-BREAK SPACE 字符,并使用以下任一解决方案: 使用: 使用: 参考 您可以在以下位置找到相关的详细讨论: 使用XPATH搜

  • 我试图通过它包含的文本找到一个元素,然后检查该元素是否也有指向某个特定位置的链接。我正在使用Selenium/Java。 我试图通过文本找到元素,如果我可以的话,以最大限度地减少更新UI时需要做的更改(减少测试维护成本)。 我尝试了以下操作,但assert失败了,因为getAttribute最终为空。 要查找/使用的元素的HTML: 我对硒还是一个新手,所以任何帮助都非常感谢。

  • 并在匹配一些条件后用Java8流对其进行过滤 那将如何完成呢? 上面示例的结果应该是

  • Jsoup将每个文本保存为textnode,包括元素之间的\r\n内容。我想要选择页面上的所有真实文本,并选择它的父文本以删除该父文本中的每一个文本。 我现在有这个: 它不会删除包含\n的所有textnodes,所以它会尝试删除正文,因为这是第一个包含textnodes的元素。 我只想选择所有带有文本的元素,并做element.parent().children().remove(); 也没有按照

  • 问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数: