-1

这是我要单击的元素的 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 增加了一层我没有得到的复杂性。

4

1 回答 1

0

<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
    

注意:使用 Chrome 时,您可以在 Selenium “selenium.common.exceptions.NoSuchElementException”中找到相关讨论

于 2020-06-08T04:40:16.303 回答