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

Python Selenium:执行脚本生成确认框后如何获取返回值?

Selenium中获取confirm弹窗的用户选择结果

为什么execute_script返回None

当你用execute_script('return confirm("xxx");')时,Selenium执行这段JS后,confirm()弹窗会阻塞JS执行,直到用户关闭弹窗。Selenium的execute_script会在弹窗存在期间处于等待状态,一旦用户关闭弹窗,JS执行完成,但此时Selenium无法捕获confirm()的返回值,因此固定返回None。

switch_to.alert是否影响返回值

不会。execute_script已经返回None之后,你才执行switch_to.alert,两者是先后独立的操作,后者不会改变前者的返回结果。

正确获取用户选择的方法

有两种可行方案:

方案1:通过JS全局变量存储结果

触发confirm时,将结果存入浏览器全局变量,之后读取该变量即可拿到用户选择:

# 触发confirm并把结果存入全局变量
self.driver.execute_script('window.userChoice = confirm("test press ok or cancel");')
# 获取存储的结果
user_choice = self.driver.execute_script('return window.userChoice;')
# user_choice会是True(点击确定)或False(点击取消)

方案2:主动处理弹窗并记录结果

如果需要代码自动处理弹窗(而非用户手动操作),可切换到弹窗后执行对应动作,同时自行记录结果:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 触发弹窗
self.driver.execute_script('confirm("test press ok or cancel");')
# 等待弹窗出现
alert = WebDriverWait(self.driver, 10).until(EC.alert_is_present())
# 模拟点击确定并记录结果
user_choice = True
alert.accept()
# 若模拟点击取消则改为:
# user_choice = False
# alert.dismiss()

注意:如果是让用户手动点击弹窗,方案2不适用——用户关闭弹窗后,execute_script才会返回,此时弹窗已不存在,switch_to.alert会抛出NoAlertPresentException,这种情况下方案1是唯一可行的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:13:12