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

Python Selenium Alert异常处理问题:脚本未执行分支直接报错

解决Alert异常处理未进入分支的问题

你的代码在逻辑和异常捕获类型上都踩了坑,导致脚本直接报错而非进入异常分支,我来帮你梳理问题并给出修正方案:

问题根源

你的try块里执行的是driver.switch_to.default_content(),但此时页面已经有alert弹出——这个操作会因为存在未处理的alert而抛出UnhandledAlertException,但你捕获的是NoAlertPresentException(这个异常仅在尝试切换到alert但不存在时才会触发),所以异常根本没被捕获,直接触发了报错。

另外,代码里的alert = driver.switch_to.alert()是语法错误:switch_to.alert是属性而非方法,不需要加括号。

修正后的代码方案

这里给你两种可行的写法,适配不同场景:

方案1:主动检查并处理Alert

适合提前预判可能出现alert的场景:

from selenium.common.exceptions import NoAlertPresentException

try:
    # 尝试切换到alert,存在则处理
    alert = driver.switch_to.alert
    print('Alert Popup detected')
    alert.dismiss()
except NoAlertPresentException:
    # 无alert时执行默认内容切换
    driver.switch_to.default_content()

方案2:捕获操作被Alert打断的异常

适合不确定alert何时弹出的场景:

from selenium.common.exceptions import UnhandledAlertException

try:
    driver.switch_to.default_content()
except UnhandledAlertException:
    print('Alert Popup interrupted the operation')
    alert = driver.switch_to.alert
    alert.dismiss()
    # 处理完alert后,重新执行原操作
    driver.switch_to.default_content()

关键注意点

  • driver.switch_to.alert是属性调用,不要加括号,否则会触发语法错误。
  • 区分两种异常的触发场景:NoAlertPresentException是找不到alert时抛出,UnhandledAlertException是操作被alert打断时抛出,别搞混捕获类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:46:13