Python Selenium XPATH с несколькими тегами

У меня есть автоматизированный скрипт Python для проверки любых изменений в DOM. У меня есть xpath, который работает:

//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']

Но это дает мне больше результатов, чем мне нужно, и некоторые из них вызывают ошибки. Итак, я хочу получить нужные мне абстрактные элементы из xpath, поэтому я пытаюсь использовать что-то вроде этого:

//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']

Но это не работает, так можно ли вообще искать xpath с таким количеством тегов?

введите здесь описание изображения

<table id="example">
    <tbody>
        <tr>
            <td class="average-bg">
                <a class="link-action" data-hintbox="1" data-hintbox-static="1" role="button"                   href="javascript:void(0)">1</a>
            </td>
        </tr>
    </tbody>
</table>

person Montė Čiuklys    schedule 23.02.2019    source источник
comment
Не могли бы вы заменить html-изображение на html в текстовом формате   -  person Sers    schedule 23.02.2019


Ответы (2)


О пробных версиях кода:

  • В первой попытке вы попытались использовать все атрибуты элемента для создания xpath:

    //td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
    
  • Элементы с похожими атрибутами могут присутствовать, но в другом положении/местоположении. Следовательно, он возвращает больше, чем желаемые результаты, которые вам нужны.

  • Во второй попытке вы построили абсолютный xpath, который хрупок:

    //table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
    

Решение

В соответствии с предоставленным вами текстовым HTML-кодом для определения нужного элемента вы можете использовать одно из следующих решений:

  • xpath:

    driver.find_element_by_xpath("//table[@id='example']//td[@class='average-bg']/a[@class='link-action' and text()='1']")
    
  • css_selector:

    driver.find_element_by_css_selector("table#example td.average-bg>a.link-action")
    
person DebanjanB    schedule 23.02.2019
comment
Благодарю вас! Я нашел другой способ обойти это, но вы кое-что прояснили для меня, большое спасибо! - person Montė Čiuklys; 23.02.2019

Вот.

XML

<root>
  <e1 role='a' class='y'></e1>
  <e1 role='a' class='t'></e1>
  <e1 role='a' class='z'></e1>
</root>

XAPTH

//e1[@role='a' and @class='t']

Выход

Element='<e1 class="t" role="a"/>'
person balderman    schedule 23.02.2019
comment
Да, я понимаю, что много, спасибо. Но что, если в вашем корне есть таблица, могу ли я как-то перейти к нужному элементу? если это действительно глубоко внутри - person Montė Čiuklys; 23.02.2019
comment
Я думаю, вы можете. Почему бы и нет? - person balderman; 23.02.2019
comment
скажем, мой элемент был в элементе e1, как бы я представил это в своем xpath? - person Montė Čiuklys; 23.02.2019