После того, как вы нашли элемент WebDriver, как вы можете применить xpath к этому элементу, чтобы сузить его дальше? - PullRequest
0 голосов
/ 12 ноября 2018

Вот ситуация:

Структура моего HTML-кода выглядит примерно так:

XPATH1
     XPATH1 + XPATH2
     XPATH1 + XPATH3
XPATH1
     XPATH1 + XPATH2
     XPATH1 + XPATH3

Мне нужен доступ к этим подпутям. Итак, я пытаюсь сначала включить все XPATH1 в список, а затем перебирать его.

К сожалению, для меня это дубликаты.

I 'у нас есть следующий код в Python:

elements_list = driver.find_elements_by_xpath(XPATH1)

for element in element_list:
    var1 = element.find_element_by_xpath(XPATH2) #We need XPATH1/XPATH2
    var2 = element.find_element_by_xpath(XPATH3)
    #lots more sub-paths

Я подозреваю, что происходит следующее: element.find_element_by_xpath (XPATH2) НЕ применяется к XPATH элемента. Вместо этого он применяется универсально.на странице и получает весь список XPATH2.

Я также не могу использовать XPATH1 + XPATH2, потому что тогда он все еще идет к пути к каждому элементу.

Как получить доступкаждый элемент на этой странице использует цикл for?

Кроме того, есть ли какое-либо использование функции element.find_element_by_xpath ? Это кажется практически бесполезным, потому что xpath применяется ко всей странице.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Другой способ решения этой проблемы, помимо того, что указал Андерссон, заключается в следующем:

total_count = len(driver.find_elements_by_xpath(XPATH1))

for i in range(1,total_count+1):
    var1 = element.find_element_by_xpath("("+ XPATH1 + ")[{0}]".format(i) +  XPATH2)
    var2 = element.find_element_by_xpath("("+ XPATH1 + ")[{0}]".format(i) + XPATH3)

По сути, мы вводим абсолютный путь, помещая XPATH1 в скобки и повторяя его с индексом.

0 голосов
/ 12 ноября 2018

Это потому, что вы не указали КОНТЕКСТНЫЙ УЗЕЛ.

Обратите внимание, что вам следует запустить XPATH2 и XPATH3 с точки, которая обозначает "текущий контекст" (XPATH1):

elements_list = driver.find_elements_by_xpath('//div')

for element in element_list:
    var1 = element.find_element_by_xpath('./a')
    var2 = element.find_element_by_xpath('.//p')

Такое поведение Selenium присуще поиску только по XPath.При использовании других методов, таких как find_element_by_css_selector, find_element_by_name и т. Д., Узел контекста указывать не следует, поэтому element.find_element_by_css_selector('a') будет работать нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...