Найти xth td с td содержится в том же tr xpath python

На моей странице есть таблица с 11 столбцами, учитывая текстовое значение для столбца 2, я хочу нажать на 11-й столбец (кнопка со стрелкой) для той же строки.

Моя DOM выглядит так:

<table id=”atab”  width=”100%” class=”at-class”>`  
    <thead>…</thead>  
    <tbody>  
        <tr>...</tr>  
        <tr>  
            <td>…</td>  
            <td>  
                <a href=”/abc/def/ghi/prop?id=1”>grp1</a>  
            </td>  
            <td>…</td>  
            <td>…</td>  
            <td>200</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>…</td>  
            <td>  
                <ul class=”dropwd”  
                    <li class>  
                        <input class=”a-act a-menu-button” type=”button” value=”^”  
                        <ul class=”sub_menu” style=”vis””>…</ul>  
                    </li>  
                </ul>  
            </td>  
        <tr>  
    <tbody>  

ЭТО РАБОТАЕТ (как я только что взял xpath из элемента inspect). Я не могу использовать это все же.

myxpath = "//*[@id='atab']/tbody/tr[2]/td[11]/ul/li/input”
myxpath.click()

Мне нужно использовать контейнер, затем взять брата или сестру (11-я позиция, 9-я там, где у меня есть мой контейнер). Я попробовал следующее для myxpath, но он не может найти элемент. Я использовал тот же формат в другом месте, и это было хорошо. Единственная разница в том, что на этот раз я получаю не соседнего брата, а родного брата.

ГДЕ campg = grp1

//table[@class='at-class']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='atab']//td[contains(text(),' " + campg + " ')]/following-sibling::td[9]/ul/li/input
//* [@id='campaigns']//td[contains(text(),' " + campg +  " ')]/following-sibling::td[9]/ul/li/input[@type=’button’]

Я пробовал и другие комбинации.

1 ответ

Решение

Это выражение XPath выбирает таблицу, ищет совпадающие строки (в которой второй столбец содержит искомое иглу), а затем выбирает в этой строке 11-й столбец с соответствующим элементом ввода.

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

//table[@id='atab']//tr[contains(td[2], 'needle')]/td[11]/ul/li/input
Другие вопросы по тегам