NoSuchElementException: Сообщение: невозможно найти элемент при попытке найти элемент с помощью Selenium и Python - PullRequest
2 голосов
/ 18 марта 2019

У меня есть определенная кнопка входа в систему, к которой у меня нет доступа с помощью Python Firefox Selenium. Это кнопка входа на этой веб-странице: https://schalter.asvz.ch/tn/lessons/39616

Я использую Ubuntu 16.04, Python 3.5.2, Firefox 65.0 и Selenium 3.141.

Я попробовал несколько комбинаций подходов, которые я нашел здесь для stackoverflow, включая следующие:

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-вставлен']

Чем отличается эта кнопка? Как я могу заставить это работать?

Ответы [ 4 ]

1 голос
/ 18 марта 2019

Это сообщение об ошибке ...

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

... означает, что ChromeDriver не смог найти нужный элемент через использованный вами локатор.

Фактически, ваши первые два (2) локатора были просто безупречны.

Тем не менее, желаемый элемент - это элемент Angular , поэтому для определения местоположения этого элемента необходимо вызвать WebDriverWait , чтобы элемент был активным , и вы можете использовать любой из следующих Стратегии локатора :

  • Использование 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
    
0 голосов
/ 18 марта 2019

Попробуйте следующий xpath:

xpath = "//button[@title='Login']"
element = driver.find_element_by_xpath(xpath);
element.click();
0 голосов
/ 18 марта 2019

Следующий xpath работает просто отлично (протестировано с использованием selenium java)

//button[@title='Login']

Мне удалось найти и нажать кнопку.

0 голосов
/ 18 марта 2019

Попробуйте вариант ниже.

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
...