【问题标题】:Python Selenium - find element by link containing certain wordsPython Selenium - 通过包含某些单词的链接查找元素
【发布时间】:2018-08-29 11:33:17
【问题描述】:

我正在运行一个代码,该代码浏览文件夹并最终到达目的地并通过单击下载文件。

例如,要查找我正在使用的文件夹:

find_element_by_link_text("Pricing and Catalogs")

问题是文件夹有时不是完全那样写的。例如,它有两个空格。

所以我的问题是:是否可以通过包含某些单词的文本找到元素?例如这样的事情(我知道这不正确,我只是想让你理解我):

find_element_by_link_text(containing "Pricing" and "Catalogs")

我搜索了答案,但找不到我要找的东西。 如果这是重复的,我道歉并要求指出正确的方向。

提前致谢!

编辑:使用 find_element_by_partial_link_text 不会这样做,因为其他文件夹的名称中包含 PricingCatalogs

<td class="ms-tv-item ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeView_2" style="white-space:nowrap;"><a class="ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeView_0 ms-tv-item ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeView_1" href="javascript:_spNavigateHierarchy(this,'','TAKES YOU TO SOME PAGE',false,'FolderNode', '')" title="Pricing  and  Catalogues" id="ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeViewt223" style="border-style:none;font-size:1em;">Pricing  and  Catalogues</a></td>

【问题讨论】:

  • 分享您的 HTML 链接。
  • 我使用 Java。 Python有类似find_element_by_partial_link_text()的东西吗?
  • @SiKing 使用 find_element_by_partial_link_text 不会这样做,因为其他文件夹的名称中包含 PricingCatalogs
  • 当您尝试find_element_by_link_text("Pricing and Catalogs") 时,您得到的错误是什么?我问的原因是文档说:“通过它们显示的确切文本定位元素”。由于多个空格在 HTML 中会自动折叠并显示为单个空格,因此应该可以。
  • 我收到 NoSuchElementException 错误。你是对的,它通常可以工作,但在某些情况下它不会。正如您在我提供的 HTML 中看到的那样,这种情况在单词之间有 2 个空格并导致了问题。这就是为什么我想要一个替代方案。

标签: python-3.x selenium selenium-chromedriver


【解决方案1】:

你可以试试 XPath:

例子:

find_element_by_xpath("//a[contains(text(), 'Pricing') and contains(text(), 'Catalogues')]")

编辑您拼错了链接文本。代码有“目录”。但是 HTML 有“目录”。更正了 xpath。

【讨论】:

  • 您好,这不起作用。它生成了一个NoSuchElementException
  • @clasico90 尝试更正答案。其他人也可以。
  • 好吧,该死的。奇迹般有效。我过去 3 天都在调查这个问题,这是因为拼写错误。谢谢。标记为正确。
  • @clasico90 如果您不知道如何在浏览器中查找 XPath,这可能会对 stackoverflow.com/questions/22571267/… 有所帮助。只需在粘贴到代码之前尝试您的 xpath 或 css 选择器表达式。
【解决方案2】:

另外,用节点替换文本有时效果更好:

使用示例:

find_element_by_xpath("//a[contains(node(), 'Pricing') and contains(node(), 'Catalogs')]")

【讨论】:

  • 您好,这不起作用。它生成了一个NoSuchElementException
【解决方案3】:

要单击包含文本 PricingCatalogs 的预期元素,您可以使用以下任一代码行:

  • LINK_TEXT

    WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.LINK_TEXT, "Pricing  and  Catalogues"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(.,'Pricing') and contains(.,'Catalogs')]"))).click()
    
  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeView_0.ms-tv-item.ctl00_PlaceHolderLeftNavBar_ctl02_WebTreeView_1[title='Pricing  and  Catalogues']"))).click()
    

【讨论】:

  • 您好,这不起作用。它生成了一个NoSuchElementException
  • 可以分享相关的HTML吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2021-02-08
  • 2022-08-10
相关资源
最近更新 更多