#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
» означает/