Python Selenium错误:NoSuchElementException

时间:2017-07-12 16:31:59

标签: python selenium

我正在尝试找到包含子字符串'.ics'的href,例如在屏幕截图中,并将链接作为字符串返回。 screenshot

以下是我的代码尝试:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get('http://miamioh.edu/emss/offices/career-services/events/index.html')

element = driver.find_element_by_partial_link_text('.ics')

然而,我收到此错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"partial link text","selector":".ics"}

毫无疑问,我忽略了一些非常基本的东西,但我无法弄清楚是什么。我也试过了这行

element = driver.findElement(By.cssSelector("a[href*='services.ics']")).click();

而不是以'element'开头的另一行。但是,这给出了

AttributeError: 'WebDriver' object has no attribute 'findElement'

4 个答案:

答案 0 :(得分:4)

链接文本是您在网页上看到的链接的精确文本,而部分链接文本只是该链接文本的某些子字符串。

"services.ics"href属性的一部分。如果您想按"services.ics"找到元素,可以使用

driver.find_element_by_xpath('//a[contains(@href, "services.ics")]')

您也可以使用title属性来匹配所需的元素:

driver.find_element_by_xpath('//a[@title="iCal Feed"]')

请注意

element = driver.findElement(By.cssSelector("a[href*='services.ics']")).click();

Java代码的Python类似物

from selenium.webdriver.common.by import By 
element = driver.find_element(By.CSS_SELECTOR, "a[href*='services.ics']").click();

更新

可能会动态生成链接,因此您可以尝试按以下方式应用ExplicitWait以避免NoSuchElementException

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//a[@title="iCal Feed"]'))).click()

更新2

作为位于iframe内的目标链接,您应该在点击链接之前切换到该框架:

wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("trumba.spud.1.iframe"))
driver.find_element_by_xpath('//a[@title="iCal Feed"]').click()

答案 1 :(得分:1)

在Python中,Selenium方法是driver.find_element。部分链接文本也不是指链接,而是指" a"中的文本。标签。即

<a href="link.com">this is the link text</a>

答案 2 :(得分:1)

您需要获取属性href。首先找到该元素而不查找&#34; HREF&#34;,然后获取属性。

myHrefVal = element.get_attribute('href')
print(myHrefVal)

正如@Andersson所说,尝试使用xPath。

driver.find_element_by_xpath('//a[@title="iCal Feed"]')
祝你好运! :)

答案 3 :(得分:1)

由于您要搜索<a href="..."> 结尾的.ics。我们可以使用CSS选择器执行此操作,例如:

a[href$=".ics"]

所以我们可以使用以下代码:

element = driver.find_element_by_css_selector('a[href$=".ics"]')

或者如果您正在寻找'services.ics'

element = driver.find_element_by_css_selector('a[href$="services.ics"]')