我正在使用Selenium进行一些网络抓取,现在我想找到用户可以单击并在链接文本,按钮文本,element id,元素中包含“下载”字样(大写)的所有元素。元素class或href。这可以包括链接,按钮或任何其他元素。
id
class
href
在这个答案中,我找到了一个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')]]"。所以我尝试了以下方法:
"//*[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表达式选择 :具有id或class或href属性或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>