如何通过setValue或Recordation No使用Selenium定位并点击表格行
问题与解决方案
用户面临的情况:表格行的顺序会动态变化,原先使用的基于索引的XPath(如//*[@id="resulttable"]/tbody/tr[1])无法稳定定位目标行,需要根据<tr>元素onclick属性中的setValue参数,或者表格内显示的“Recordation No”来定位并点击对应行。
方案一:通过setValue值定位目标行
直接匹配onclick属性中包含指定setValue参数的<tr>元素,不受行顺序变化影响:
XPath表达式
//table[@id='resulttable']/tbody/tr[contains(@onclick, "setValue('115751')")]
Selenium代码示例
from selenium.webdriver.common.by import By # 目标setValue值 target_setvalue = '115751' # 构造动态XPath xpath = f"//table[@id='resulttable']/tbody/tr[contains(@onclick, \"setValue('{target_setvalue}')\")]" # 定位并点击 mychoice = driver.find_element(By.XPATH, xpath) mychoice.click()
方案二:通过“Recordation No”定位目标行
如果需要根据页面显示的“Recordation No”数值(如3301051)定位,可先找到对应数值的单元格,再定位其父级行元素:
XPath表达式
//table[@id='resulttable']/tbody/tr/td[text()[normalize-space()='3301051']]/parent::tr
normalize-space()用于忽略文本中的换行、空格,避免因单元格内的格式问题导致定位失败
Selenium代码示例
from selenium.webdriver.common.by import By # 目标Recordation No target_record_no = '3301051' # 构造动态XPath xpath = f"//table[@id='resulttable']/tbody/tr/td[text()[normalize-space()='{target_record_no}']]/parent::tr" # 定位并点击 mychoice = driver.find_element(By.XPATH, xpath) mychoice.click()
内容的提问来源于stack exchange,提问作者Shane S
相关产品推荐
相关产品推荐

