Python Selenium XPATH с несколькими тегами - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть автоматический скрипт на 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 с этиммного тегов?

enter image description here

<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>

Ответы [ 2 ]

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

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

  • В первой попытке вы попытались использовать все атрибуты элемента для создания 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")
    
0 голосов
/ 23 февраля 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"/>'
...