Найти 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