Найдите элемент на основе другого элемента xpath - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь автоматизировать процесс, используя селен и веб-драйвер.

HTML выглядит так:

<span class="contract-item">
    <span class="contract-label">
        <span class="contract-name">Jimmy</span>
    </span>
    <div class="current-stats">
        <span class="info"></span>

Проблема, с которой я сталкиваюсь, заключается в том, что существует многоклассы item 'и' info '. Я хочу найти информацию только для конкретных имен контрактов. Однако, найдя «название контракта», я потерял информацию. Как мне получить «информацию» для определенного имени?

У меня есть это.

team_name = self.driver.find_elements_by_xpath("//*[contains(text(), {})]".format(jimmy))[1]

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Ниже требуется xpath:

// * [@ class = 'contract-item' и содержит (., 'Jimmy')] / div / span [@ class = 'info']

Вам просто нужно изменить имя контакта String (т.е. Jimmy) на желаемое, и вы получите соответствующую информацию.

0 голосов
/ 03 ноября 2019

Сначала вам нужно получить элемент, содержащий имя, вы сделали это правильно

//*[contains(text(), "{}")]

Затем вам нужно найти ближайший общий родительский элемент между информационным элементом и найденным элементом, каждый /.. поднимется на один элемент вверх по дереву HTML.

//*[contains(text(), "{}")]/../..

Наконец, найдите правильную фильтрацию элементов по классу

//*[contains(text(), "{}")]/../..//span[@class="info"]//text()

Итак, ваше выражение должно быть:

team_name = self.driver.find_elements_by_xpath('//*[contains(text(), "{}")]/../..//span[@class="info"]//text()'.format('jimmy'))[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...