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
相关产品推荐
相关产品推荐

