使用Selenium和partial_link_text抓取一个html元素

时间:2015-08-06 15:22:50

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

我正在尝试使用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()

enter image description here

1 个答案:

答案 0 :(得分:2)

您将链接文本与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()