selenium webdriver не может найти элемент из своего xpath, даже если xpath правильный

#python-3.x #selenium-webdriver #xpath

Вопрос:

Я пытаюсь получить атрибуты тега, используя selenium webdriver и используя xpath в качестве локатора. Я передал xpath драйверу , и он вернулся NoSuchElementException , но когда я ввел xpath в окно «Проверить элемент», он показал этот конкретный тег, что означает, что локатор существует. Так что же не так с селеном? Это все равно то же самое, даже если я дам полный xpath

 from selenium import webdriver  driver = webdriver.Chrome('D:\chromedriver.exe') driver.get('https://cq-portal.webomates.com/#/login')   element=driver.find_element_by_xpath("//button[@type='button']") print(element.get_attribute('class'))  driver.quit()  

версия селена = 3.141.0

Ответ №1:

Вам нужно просто подождать, пока страница загрузится. Ваш код в полном порядке. Либо дайте жесткому коду ожидание, такое как сон, либо наличие элемента. И то, и другое сработает.

 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver driver = webdriver.Chrome(PATH) driver.maximize_window() wait = WebDriverWait(driver, 20)  driver.get('https://cq-portal.webomates.com/#/login')  wait.until(EC.presence_of_element_located((By.XPATH, "//button[@type='button']")))  element = driver.find_element(By.XPATH, "//button[@type='button']") print(element.get_attribute('class'))  driver.quit()  

Выход:

btn btn-md btn-первичный btn-блок

Ответ №2:

Петли, как будто вы пропускаете задержку. Пожалуйста, попробуйте это:

 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver  driver = webdriver.Chrome('D:\chromedriver.exe') wait = WebDriverWait(driver, 20)  driver.get('https://cq-portal.webomates.com/#/login')  wait.until(EC.visibility_of_element_located((By.XPATH, "//button[@type='button']")))  element=driver.find_element_by_xpath("//button[@type='button']") print(element.get_attribute('class'))  driver.quit()  

Комментарии:

1. Я попытался запустить этот код, но на этот раз я получил ошибку TimeoutException со странным обратным следом

2. @BibekjitSingh, ты прав. Приведенный выше код не будет работать, потому что кнопка изначально находится в отключенном состоянии, и здесь мы проверяем «visibility_of_element_located». Вот почему вы получаете исключение тайм-аута со странной трассировкой стека.

3. @QualityMatters хороший улов, чувак!