如何单击 xpath 元素后面的按钮? - python, 硒

How to to click button following xpath element? - python, selenium

我正在尝试单击以下按钮:

    <tr class="">
<td>
May 09 2022 09:00
</td>
<td>
Ecole 1337, Parc Tétouan Shore, commune de Martil, CP93150 – Tétouan
</td>
<td>
No spaces left
</td>
<td>
<a class="btn btn-primary" id="js-piscine-17" href="/piscines/17/piscines_users">Add me to the waiting list</a>
</td>
</tr>

使用以下代码:

table = browser.find_element(By.CSS_SELECTOR, '#subs-content > table')
time.sleep(5)
plc = table.find_elements(By.XPATH, "//*[contains(text(),'Martil')]")[-1]
print(plc.text)
plc.click()

这段代码确实打印了文本,但没有单击所需的按钮。
有些人可能会问:那么,为什么不直接使用 css 选择器或按钮的 id?
但我希望网站得到更新,并且会有更多按钮,我希望我的代码可以单击这些按钮,但我不知道它们的 ID 或 css 选择器是什么。 唯一的标准是它的“”中应该有单词 'Martil'。

编辑:感谢@Dimitar,我能够使用以下代码解决问题:

table = browser.find_element(By.CSS_SELECTOR, '#subs-content > table')

for row in table.find_elements(By.TAG_NAME, 'tr')[::-1]:
    martil_row = row.find_element(By.XPATH, './/*[contains(text(), "Martil")]')
    if martil_row is not None:

        row.find_element(By.TAG_NAME, 'a').click()
        break

您的代码中的问题是您找到了不可点击的“td”元素。可点击的元素是“a”。

martil_rows = []
table = driver.find_element(By.CSS_SELECTOR, '#subs-content > table')
for row in table.find_elements(By.TAG_NAME, 'tr'):
    martil_row = row.find_element(By.XPATH, './/*[contains(text(), "Martil")]')
    if martil_row is not None:
        martil_rows.append(row.find_element(By.TAG_NAME, 'a'))

martil_rows[-1].click()