NoSuchElementException:消息:尝试使用Selenium和Python定位元素时无法定位元素

时间:2019-03-18 08:19:45

标签: python selenium xpath css-selectors webdriverwait

我有一个特定的登录按钮,无法使用Python Firefox Selenium访问。这是此网页上的登录按钮:https://schalter.asvz.ch/tn/lessons/39616

我正在运行Ubuntu 16.04,Python 3.5.2,Firefox 65.0和Selenium 3.141。

我尝试了在堆栈溢出中找到的几种方法的组合,包括:

login = driver.find_element_by_xpath("//*[@class='btn btn-default ng-star-inserted']")

login = driver.find_element_by_xpath("//button[@class='btn btn-default ng-star-inserted']")

login = driver.find_element_by_class_name('btn btn-default ng-star-inserted')

login = driver.find_element_by_xpath("//*[contains(., 'Login')]")

login = driver.find_element_by_name('app-lessons-enrollment-button')

但是他们都不起作用。总是导致:

  

NoSuchElementException:消息:无法找到元素:   // * [@@ class ='btn btn-default ng-star-inserted']

此按钮有何不同?我该如何运作?

4 个答案:

答案 0 :(得分:1)

此错误消息...

NoSuchElementException: Message: Unable to locate element: //*[@class='btn btn-default ng-star-inserted']

...表示 ChromeDriver 无法通过您使用的定位器找到所需的元素。

实际上,您的前两(2)个定位器是完美的。

但是,所需的元素是Link Here元素,因此要定位该元素,必须诱使 WebDriverWait 使元素可点击,并且可以使用以下任一Angular

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-default.ng-star-inserted[title='Login']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-default ng-star-inserted' and @title='Login']"))).click()
    
  • 注意:您必须添加以下导入:

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

答案 1 :(得分:0)

尝试以下选项。

Login=driver.find_element_by_css_selector("button.ng-star-inserted")

或者尝试这个

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'button.ng-star-inserted'))).click()

对于选项2,您需要进行以下导入。

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

答案 2 :(得分:0)

尝试以下xpath:

xpath = "//button[@title='Login']"
element = driver.find_element_by_xpath(xpath);
element.click();

答案 3 :(得分:0)

跟随xpath正常工作(使用selenium java测试)

//button[@title='Login']

我能够找到并单击按钮。