Python Selenium Находит элемент по пути X Только под этим именем класса

#python #selenium #selenium-webdriver

Вопрос:

Я пытаюсь применить find_element_by_xpath только к определенным именам классов

 textboxes = driver.find_elements_by_class_name("freebirdFormviewerViewNumberedItemContainer")
for element in textboxes:


    a = element.find_element_by_xpath("//*[contains(@id, 'i')]")
 

Я хочу найти элемент по пути x, который содержит первый элемент с «идентификатором», так как в этом узле могут быть кратные значения, например «id1», «id2».

Проблема в том, что он продолжает возвращать один и тот же идентификатор, т. е. «id1», несмотря на то, что я использую цикл for. Разве он не перебирает разные элементы в списке текстовых полей? Я хочу применить путь find_element_by_xpath только к этому дочернему узлу.

Ответ №1:

Вы близки к правильному решению, но упускаете небольшой момент . 🙂
Поэтому внутри цикла for вы должны использовать a = element.find_element_by_xpath(".//*[contains(@id, 'i')]")
Я имею в виду . перед // в начале xpath выражения.
Также, возможно, есть проблема с i внутренней contains(@id, 'i') частью — я не вижу, где вы обновляете ее значение.

Чтобы найти input элемент, вы можете просто использовать следующее css selector .freebirdFormviewerViewNumberedItemContainer input или, если вы предпочитаете xpath , вы можете использовать //div[@class='freebirdFormviewerViewNumberedItemContainer']//input

Ответ №2:

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

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

1. Нет, он пропал . , как я уже упоминал. Без него find_element_by_xpath("//*[contains(@id, 'i')]") возвращается первый элемент во всей странице, расположенный рядом с ним, xpath а не внутри какого-либо другого указанного элемента. Вот почему . «нравится from here » означает/