javascript - 如何使用 Selenium x-path 查找包含单词 "download"的所有元素?

标签 javascript python html selenium xpath

我正在使用 Selenium 进行一些网络抓取,现在我想找到所有用户可以点击并且在链接文本、按钮文本、元素 id、元素 classhref。这可以包括链接、按钮或任何其他元素。

this answer我为寻找基于特定文本(或不区分大小写和部分匹配)的按钮搜索 xpath 的人找到了一个 xpath:

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

但是在this page不返回任何结果,即使其中有以下链接:

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

有谁知道我如何才能找到网站中以某种方式包含“下载”一词的所有元素?

[编辑] 此问题被标记为与获得 an answer 的问题重复其中建议改为"//*[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、元素 class 还是 href?欢迎所有提示!

最佳答案

试试这个:

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

此 Xpath 1.0 表达式选择:所有具有 idclasshref 属性或文本的元素-node child,其字符串值包含字符串“download: in any capitalization.

这是一个运行证明。下面的 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>

关于javascript - 如何使用 Selenium x-path 查找包含单词 "download"的所有元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832164/

相关文章:

javascript - 尝试使 CSS 与 JavaScript 内联

javascript - element.setAttribute() 方法如何让它在 I.E 中工作?

javascript - 如何仅对 css 而不是隐藏元素进行点击跟踪

python - python中的时间间隔重叠

python - 有没有办法在类内的装饰器中引用实例?

python - 为什么 recv 在接收到所有数据之前不阻塞?

javascript - 这个奇怪的 javascript 有什么用?

javascript - 从 contenteditable div 获取内容

php - 为 mysql、php 表创建过滤器

javascript - Vue.js 在@change 上获取选定的选项