You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium定位adv_acc_search_table时无<tr>标签运行失败,遗漏了什么?

问题分析&解决建议
  • 元素查找逻辑位置错误:你将visibility_of_any_elements_located查找tr元素的代码放在了try结构之前,当页面不存在匹配的tr标签时,等待会直接抛出TimeoutException,程序直接终止,根本不会进入后续的try分支执行你预设的不存在逻辑。
  • 判断条件逻辑错误:你遍历拿到的account是WebElement对象,无法和数字0做大小比较,你原本要判断的应该是查询到的tr元素列表的总长度是否大于0,而不是遍历每个元素和0做比较。
  • 异常捕获语法错误:你当前的except:后面直接写TimeoutException等于没有任何异常处理逻辑,捕获到异常后会直接跳过,既不会报错也不会执行你预期的else分支逻辑。
  • else分支位置错误:你把不存在tr的逻辑写在了for循环内部,哪怕列表有值,第一次循环如果不满足条件也会执行else分支,和你预期的「整个列表为空才执行else」的逻辑完全不符。

修正后可运行代码

from selenium.common.exceptions import TimeoutException

try:
    # 把tr元素查找逻辑移入try块内
    adv_acc_search_table = wait.until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR, '[class="standard_table_body"]>table tr')))
    if len(adv_acc_search_table) > 0:
        # 直接取第一个匹配的tr元素点击,无需多余遍历
        adv_acc_search_table[0].click()
    else:
        # 列表为空时执行无账户的逻辑
        print("No Accounts to select")
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id="advanced_account_search_window_window_title"] img'))).click()
        APA = Select(wait.until(EC.visibility_of_element_located((By.ID, 'MLADAT'))))
        APA.select_by_index(0)
# 明确捕获tr不存在时抛出的超时异常,对应无tr的场景
except TimeoutException:
    print("No Accounts to select")
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[id="advanced_account_search_window_window_title"] img'))).click()
    APA = Select(wait.until(EC.visibility_of_element_located((By.ID, 'MLADAT'))))
    APA.select_by_index(0)

可选优化点
  • 可以把无账户的重复逻辑封装成独立函数,减少代码冗余
  • 如果需要兼容页面加载慢的场景,可以适当调整wait的超时时间,避免正常有tr的场景误判为不存在

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:57:02