Selenium定位表格含“Em aberto”行及获取对应“Visualizar”按钮咨询
Selenium定位目标行对应按钮实现方案
核心逻辑
你遍历到每一行时,只要确认当前行包含Em aberto状态,直接在当前row元素的范围内查找对应Visualizar按钮即可,不会匹配到其他行的同名按钮。
修正后的代码段
把你原来遍历行的部分替换成下面的代码即可:
# 前面的登录、切换iframe等原有代码保持不变 table_id = navegador.find_element_by_id('faturaspnl.orderedflextablemo.tabela') rows = table_id.find_elements_by_tag_name("tr") for row in rows: # 先获取当前行所有列 cols = row.find_elements(By.TAG_NAME, "td") # 跳过没有足够列的空行/表头行 if len(cols) < 3: continue # 获取状态列的文本,你的场景下状态在索引为2的第三列,对应类名gwt-HTML的元素 try: status_elem = cols[2].find_element(By.CLASS_NAME, "gwt-HTML") status_text = status_elem.text.strip() if "Em aberto" in status_text: # 找到目标行后,在当前行范围内查找Visualizar按钮 # 若按钮id不重复可直接用id定位,若重复就换成类名、文本属性等相对定位 visualizar_btn = row.find_element(By.ID, "g.image.visualizar") # 点击按钮触发下载 visualizar_btn.click() # 只有1个待处理文件匹配到就退出循环,多个待处理就注释掉下面的break break except Exception as e: # 跳过当前行没有状态元素或者按钮的异常 continue
注意事项
- 如果你的表格里多个行的按钮id重复,把查找按钮的方式换成xpath相对定位即可,比如
row.find_element(By.XPATH, ".//*[contains(@title,'Visualizar')]"),开头的.代表从当前行节点开始查找,是相对定位不找错其他行元素的核心 - 后续可以把固定时长的
sleep替换成Selenium的显式等待WebDriverWait,可以提升脚本稳定性,避免页面没加载完成就查找元素报错
内容的提问来源于stack exchange,提问作者José Eronaldo
相关产品推荐
相关产品推荐

