【问题标题】:Grabbing an html element using Selenium and partial_link_text使用 Selenium 和 partial_link_text 抓取一个 html 元素
【发布时间】:2015-10-29 20:02:09
【问题描述】:

我正在尝试在 Firefox 驱动程序中使用 Selenium 的 driver.find_element_by_partial_link_text 获取链接元素。

我使用它的原因是因为链接的全名会定期更改,但最后几个字符将始终保持不变。类似于:“[...] AL Changes.xlsx”

由于某种原因,我收到“NoSuchElementException:无法定位元素”错误

这里是html...

<a class="ms-listlink ms-draggable" onmousedown="return VerifyHref(this,event,'1','SharePoint.OpenDocuments','')" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','SharePoint.OpenDocuments.3','1','SharePoint.OpenDocuments','','','','2027','0','0','0xb008431061')" href="/sites/market/Market_And_Customer_Information/MCIR Library/01 2015 AL Changes.xlsx" DragId="3">01 2015 AL Changes</a>​

这是我的代码:

self.driver.get(url_path)
self.driverfind_element_by_partial_link_text('AL Changes.xlsx').click()

【问题讨论】:

    标签: python html python-2.7 selenium selenium-webdriver


    【解决方案1】:

    您将链接文本与 href 属性值混淆了。

    您案例中的链接文本是“01 2015 AL Changes”:

    self.driver.find_element_by_link_text('01 2015 AL Changes').click()
    

    如果您需要使用href 属性来定位元素:

    self.driver.find_element_by_css_selector('a[href$="AL Changes.xlsx"]').click()
    

    $= 表示“以”结尾。


    您可能还需要等待链接变为可点击:

    from selenium.webdriver.common.by import By
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 10)
    link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "01 2015 AL Changes")))
    link.click()
    

    【讨论】:

    • 所以我仍然遇到同样的错误。我试图解析的 HTML 上是否可能存在安全功能?这是一个公司网站。
    • @Josh 好的,页面上有 iframe 元素吗?
    • 是的,只有一个 iframe 元素。这个元素只占用一行html,而我要毕业的元素不在那些
    • 我错了。有一个 iframe 元素。我试图抓取的元素不在
    • 还有你修改​​过的代码,我收到了一个超时错误。所以看起来代码根本找不到元素,这导致它“wait.until”超时
    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多