You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium求助:定位表格中无ID的特定Delete按钮

Selenium定位表格内特定Delete按钮的解决方法

问题场景

需要定位表格中与katja@katja.com对应的Delete按钮,该按钮无唯一ID标识,表格HTML结构如下:

<tr id="0dca11a5-11d3-4ab5-a255-e55ab331dc19">
   <td class="emailAdress">max@max.com</td>
   <td class="action">
      <form action="RemoveUserFromAccount" method="post">
         <input id="usernameToRemove" name="usernameToRemove" value="max@max.com">
         <button type="submit" class="button button-danger remove_user">Delete</button>
      </form>
   </td>
</tr>
<tr id="e5b111b5-71e9-4272-bcd9-11c8fe831a49">
   <td class="emailAdress">john@john.com</td>
   <td class="action">
      <form action="RemoveUserFromAccount" method="post">
         <input id="usernameToRemove" name="usernameToRemove" value="john@john.com">
         <button type="submit" class="button button-danger remove_user">Delete</button>
      </form>
   </td>
</tr>
<tr id="a50d080c-6ed1-480f-b92f-6576fe3e6549">
   <td class="emailAdress">katja@katja.com</td>
   <td class="action">
      <form action="RemoveUserFromAccount" method="post">
         <input id="usernameToRemove" name="usernameToRemove" value="katja@katja.com">
         <button type="submit" class="button button-danger remove_user">Delete</button>
      </form>
   </td>
</tr>

你之前代码的问题

  • 第一段代码仅定位到了邮箱所在的<td>元素,并非目标Delete按钮
  • 第二段XPATH语法错误,正确的contains写法应为//*[contains(text(),'katja@katja.com')](你多写了一个闭合方括号,且语法结构错误)
  • 第三段代码语法错误,By.XPATH需传入字符串参数,正确格式为driver.find_element(By.XPATH, "//*[text()='katja@katja.com']");且获取父元素应使用相对定位而非get_attribute('parentElement')

正确的定位方法

方法1:通过邮箱td的兄弟节点定位

利用XPATH的兄弟节点定位语法,先找到邮箱对应的td,再定位其右侧action列中的Delete按钮:

from selenium.webdriver.common.by import By

button = driver.find_element(By.XPATH, "//td[text()='katja@katja.com']/following-sibling::td[@class='action']//button[text()='Delete']")
button.click()

方法2:通过表单内的input值定位

表单内的input元素value属性与邮箱一致,可通过该input定位同级的Delete按钮:

from selenium.webdriver.common.by import By

button = driver.find_element(By.XPATH, "//input[@value='katja@katja.com']/following-sibling::button[text()='Delete']")
button.click()

方法3:通过父级tr元素定位

先找到包含目标邮箱的<tr>行,再在该行内定位Delete按钮:

from selenium.webdriver.common.by import By

button = driver.find_element(By.XPATH, "//tr[td/text()='katja@katja.com']//button[text()='Delete']")
button.click()

内容的提问来源于stack exchange,提问作者SirACEair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:24:51