Поиск элемента через xpath по номеру индекса элемента в таблице - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь найти элемент по номеру индекса в Python Selenium.Элемент имеет следующий xpath;

/html/body/div[4]/div[1]/div[3]/div/div[2]/div/div/div/div/div/div/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div/div[3]/div[1]/div/div/div[9]

Я также включил ниже изображение нужного элемента.

Элемент, который я хочу:
Element I want

Я могу найти элемент через обычный xpath, но я хочу сделать это в цикле 10 000 раз.

Мне было интересно, есть ли способ найти элемент, используя егоиндекс.Вот код, который у меня есть, только для значения индекса 5, но он не работает.

Fund_click.append (driver.find_element_by_xpath("//div[@id='app']/div[1]/div[3]/div/div[2]/div/div/div/div/div/div/div[1]/div[2]/div/div/div/div[2]/div/div/div/div[2]/div/div[3]/div[1]/div/div/[div/@index='5']"))

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Попробуйте приведенный ниже xpath, чтобы подтвердить, можете ли вы найти все элементы или нет?Если страница загружена полностью, вы должны увидеть все совпадения (проверить вручную).

//div[@id='app']//div[contains(@class, 'tg-row')]

Вы можете извлечь и сохранить все элементы, используя метод driver.find_elements_by_xpath() с помощью вышеуказанного локатора xpath, так чтоВы можете избегать повторения индекса элемента каждый раз.Попробуйте следующий код:

# Fetching and storing all the matches
elements = driver.find_elements_by_xpath("//div[@id='app']//div[contains(@class, 'tg-row')]");
for element in elements:
    # printing the index numbers to confirm it has fetched or not?
    print(element.get_attribute('index'))

Попробуйте дать некоторую задержку перед извлечением, если элемент присутствует, и если вы получаете NoSuchElementException или проверьте на frame/iframe.

Если все элементыне видны, вам нужно выполнить некоторые операции прокрутки.

Если вышеупомянутый метод не работает, вы можете попробовать приведенные ниже xpath-ы, чтобы определить этот элемент на основе индекса / совпадения номеров индекса, и вы можете продолжитьс вашим подходом.

(// div [@ id = 'app'] // div [содержит (@class, 'tg-row')]) [соответствующий индекс]

или

// div [@ id = 'app'] // div [содержит (@class, 'tg-row') и @ index = 'укажите здесь порядковый номер']

или

// div [содержит (@class,' tg-row ') и @ index =' укажите здесь индексный номер ']

или

// div [@ index = 'укажите здесь индексный номер']

или

(// div [содержит (@class, 'tg-row')]) [укажите соответствующий порядковый номер здесь]

Надеюсь, это поможет...

0 голосов
/ 17 февраля 2019

На основе вашего снимка вы можете попробовать этот способ, чтобы увидеть, есть ли какая-либо разница. Я рассмотрел атрибут claas & Index.

for i in range(1,10000):    
   print(driver.find_element_by_xpath("//div[@class='tg-row tg-level-0 tg-even tg-focused']" and "//div[@index='" + str(i) + "']"))

Если вы хотите использовать номер индекса, просто попробуйте следующий код.Но я не уверен, что вы можете идентифицировать элементы только с помощью индекса, поэтому лучше попробовать первый вариант выше.

for i in range(1,10000):
   print(driver.find_element_by_xpath("//div[@index='" + str(i) + "']"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...