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

Driver元素定位if-else语句异常求助:Else分支无法执行

问题分析与解决

你的问题核心在于driver.find_element()的执行逻辑:当它定位不到目标元素时,不会返回False,而是直接抛出NoSuchElementException,导致程序中断,根本走不到else分支。

解决方案1:用find_elements()判断元素存在性

find_elements()会返回匹配元素的列表,找不到元素时返回空列表(空列表在Python中被视为False),可以安全用于条件判断:

close_buttons = driver.find_elements(By.XPATH, "//bdi[normalize-space()='Close']")
if close_buttons:
    close_buttons[0].click()
else:
    WebDriverWait(driver, 300).until(
        EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']")))
    driver.find_element(By.XPATH, "//bdi[normalize-space()='OK']").click()

print(sh.cell(row=r, column=2).value, r)
r = r + 1

解决方案2:通过try-except捕获异常

这是更贴合Selenium异常处理逻辑的方式,直接捕获元素不存在的异常来执行else分支逻辑:

from selenium.common.exceptions import NoSuchElementException

try:
    driver.find_element(By.XPATH, "//bdi[normalize-space()='Close']").click()
except NoSuchElementException:
    WebDriverWait(driver, 300).until(
        EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']")))
    driver.find_element(By.XPATH, "//bdi[normalize-space()='OK']").click()

print(sh.cell(row=r, column=2).value, r)
r = r + 1

额外优化建议

  • 避免重复定位相同元素,可将定位到的元素存为变量,减少DOM查询次数
  • 统一用WebDriverWait等待元素,提升脚本稳定性,比如判断Close元素时也加入等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

try:
    close_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='Close']")))
    close_btn.click()
except:
    ok_btn = WebDriverWait(driver, 300).until(
        EC.element_to_be_clickable((By.XPATH, "//bdi[normalize-space()='OK']")))
    ok_btn.click()

print(sh.cell(row=r, column=2).value, r)
r = r + 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49