这是我要单击的元素的html:
<a id="sd3" class="node"
href="/cgi-bin/luci/;stok=753940cb907c7e8524cfaf3c5227614c/expert/configuration/network/wlan"
target="mainFrame" onclick="javascript: d.s(3);">Wireless LAN 2.4G</a>
这是引发的错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
在F12检查屏幕上,这是xpath:
//*[@id="sd3"]
这是选择器:
#sd3
这是完整的xpath:
/html/body/div[3]/div/ul/li[2]/div/ul/li/div/ul/li[3]/div/div/div[2]/div[2]/div[2]/a
我尝试了所有这些方法:
driver.find_element_by_link_text(url).click()
driver.find_element_by_xpath("//dTreeNode[3]").click()
driver.find_element_by_partial_link_text('url').click()
driver.find_element_by_css_selector('a.node').click()
driver.find_element_by_xpath("//dd1[2]").click()
driver.find_element_by_css_selector('a#sd3').click()
driver.find_element_by_css_selector(".node[id='sd3']").click()
driver.find_element_by_xpath("//a[@id='sd3']").click()
driver.find_element_by_link_text('Wireless LAN 2.4G').click()
driver.find_element_by_xpath("//div[@id='dd1']/div[2]/a[1]").click()
driver.find_element_by_xpath("//div[@id='dd1']/div[2]/a[@id='sd3']").click()
driver.find_element_by_xpath("//a[@id='sd3']").click()
driver.find_element_by_id("sd3").click()
driver.find_element_by_link_text('Wireless LAN 2.4G').click()
driver.find_element_by_xpath("/html/body/div[3]/div/ul/li[2]/div/ul/li/div/ul/li[3]/div/div/div[2]/div[2]/div[2]/a").click()
driver.find_element_by_xpath("//*[@id='sd3']").click()
结论:我必须承认,尽管做出了种种不同的尝试,但我发现自己完全毫无头绪,却提出了同样的例外。但是我在脚本的前面使用的是同一行代码,它的工作原理就像一角钱。我什至试图给内容生成时间(3秒),因为它是动态生成的。我得出了两个结论。我要么是我找不到的问题,要么是这是一些动态生成的内容,这给我没有得到的Selenium增加了一层复杂性。
<a>
元素是启用了JavaScript的元素。因此,对于元素上的click()
,您需要将WebDriverWait推导为element_to_be_clickable()
,并且可以使用以下Locator Strategies之一:
使用LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Wireless LAN 2.4G"))).click()
使用PARTIAL_LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Wireless LAN 2"))).click()
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.node[href$='/expert/configuration/network/wlan']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='node' and contains(@href, 'expert/configuration/network/wlan')][contains(., 'LAN 2.4G')]"))).click()
注:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
注意:您可以在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome]中找到相关的讨论>