我的目标是使用selenium python单击此超链接元素,这是我尝试过的3种解决方案,但没有一个起作用。
<div class="navigation_item">
<a href="javascript:;" onclick="navigationMenu('students');">Students (165)</a>
</div>
解决方案1:
driver.find_element_by_link_text('Students (165)').click()
错误消息:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“方法”:“链接文本”,“选择器”:“学生(165)”}
解决方案2:
driver.find_element_by_xpath('/html/body/div[2]/div[1]/div[3]/div/div[1]/div[3]/div[7]/a').click()
错误消息:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ / html / body / div [2] / div [1] / div [3] / div / div [1] / div [3] / div [7] / a“}
解决方案3:使用JavaScript代码
javascript = "document.getElementsByClassName('navigation_item')[3].click();"
driver.execute_script(javascript)
错误消息:selenium.common.exceptions.JavascriptException:消息:javascript错误:无法读取未定义的属性“ click”
那么,每个解决方案出了什么问题?我该如何运作?
答案 0 :(得分:-1)
它可能会引发错误,因为在检查元素时未加载页面。尝试使用:
browser = webdriver.Firefox()
browser.implicitly_wait(5)
然后,您可以使用第一个解决方案:
driver.find_element_by_link_text('Students (165)').click()
这应该在查找元素设置超时5秒后触发。
答案 1 :(得分:-1)
要单击文本为学生(165)的元素,您必须为element_to_be_clickable()
引入 WebDriverWait ,并且可以使用以下任一{ {3}}:
使用LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Students (165)"))).click()
使用PARTIAL_LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Students ("))).click()
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.navigation_item>a[onclick^='navigationMenu'][onclick*='students']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='navigation_item']/a[starts-with(@onclick, 'navigationMenu') and contains(., 'Students')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC