#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 хороший улов, чувак!