Selenium Python:读取//following td子元素及选中指定munprod实例问题
问题排查与修复方案
核心问题分析
你的代码逻辑错误出在XPath的相对定位上:
- 当使用
//div[contains(text(), "01.jefferson.ketsds.net")]时,这个表达式会在整个DOM文档中查找匹配元素,而非限定在当前munprodServer元素的子节点范围内。 - 这导致只要页面存在该主机节点,
if条件就会成立,直接点击循环中的第一个munprod元素(即02的实例),随后break退出循环。
修复后的代码
#5. 从可用性组选项卡选择munprod **注意:有2个munprod实例,选择位于01的那个,不要选02的 munprods = WebDriverWait(browser, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[contains(text(), 'munprod')]"))) for munprod in munprods: # 从当前munprod元素出发,查找后续的td节点 munprodServer = munprod.find_element(By.XPATH, './following::td') try: # 限定在当前munprodServer元素范围内查找目标主机节点 munprodServer.find_element(By.XPATH, './div[contains(text(), "01.jefferson.ketsds.net")]') munprod.click() logger.info("Step 5: Databases --> munprod 01.jefferson.ketsds.net selected") break except NoSuchElementException: # 找不到对应主机则跳过当前实例 continue
关键修改点
- 将
//following::td改为./following::td,确保从当前munprod元素开始查找后续节点 - 将
//div[contains(...)]改为./div[contains(...)],把查找范围限定在当前munprodServer元素内 - 增加
try-except捕获NoSuchElementException,避免找不到元素时抛出错误,实现正常跳过
内容的提问来源于stack exchange,提问作者JimmyG
相关产品推荐
相关产品推荐

