Selenium如何在表格行中定位id为Newbutton的可点击按钮
可行定位方案
前置检查
在执行定位前先确认两个前提:
- 元素不在嵌套的iframe/frame中,若存在iframe嵌套需先切换到对应iframe:
driver.switch_to.frame("iframe的id/name索引") - 不要用强制休眠等待元素加载,推荐使用Selenium显式等待保证元素加载完成后再操作
定位代码实现
首先导入依赖模块:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
方案1:ID直接定位(优先级最高,最稳定)
目标按钮本身带有唯一ID属性,直接用ID定位即可:
# 初始化显式等待,最长等待10秒 wait = WebDriverWait(driver, 10) # 等待按钮可点击后返回元素对象 new_button = wait.until(EC.element_to_be_clickable((By.ID, "Newbutton"))) # 执行点击操作 new_button.click()
方案2:层级XPath定位(匹配你描述的位置规则)
按照「外层ID为wanInstTable_tbl的表格首个tr下第一个td内的New按钮」的规则写定位路径:
wait = WebDriverWait(driver, 10) new_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//table[@id="wanInstTable_tbl"]/tbody/tr[1]/td[1]/input[@value="New"]'))) new_button.click()
方案3:属性组合定位
如果ID存在动态变更的情况,可以结合class和按钮文本属性定位:
wait = WebDriverWait(driver, 10) new_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@class="NewDelbuttoncss" and @value="New"]'))) new_button.click()
异常排查
如果依然定位失败可以按以下步骤排查:
- 打开F12控制台执行
document.querySelectorAll("#Newbutton"),确认页面是否存在多个相同ID的元素,若存在则在定位路径中增加父级元素限制缩小范围 - 如果元素被其他浮层遮挡无法正常点击,可以用JS执行点击:
driver.execute_script("arguments[0].click();", new_button)
内容的提问来源于stack exchange,提问作者Loiro
相关产品推荐
相关产品推荐

