我正在尝试找到包含子字符串'.ics'的href,例如在屏幕截图中,并将链接作为字符串返回。
以下是我的代码尝试:
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'
答案 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"]')