使用Python+Selenium WebDriver无法获取JavaScript确认框返回值
解决Selenium执行confirm弹窗返回null的问题
我之前踩过这个坑!明明confirm弹窗的逻辑是点击确定返回true、取消返回false,但用Selenium执行那段JS代码却总是拿到null,折腾了好久才找到原因和解决办法,分享给你:
可能的原因
这大概率是浏览器驱动和JavaScript执行上下文的交互bug——当confirm弹窗阻塞脚本执行,你手动点击关闭后,驱动没能正确捕获到confirm的返回值,导致最终返回null。
可行的解决办法
方法1:把confirm结果存到全局对象再读取
绕开直接返回的问题,把结果挂载到window全局变量里,之后再读取:
# 触发confirm弹窗,把结果存到window.confirmResult里 driver.execute_script("window.confirmResult = confirm('Press a button!');") # 等待你手动点击弹窗(如果是自动化流程可以去掉sleep,换成Alert处理) time.sleep(5) # 读取全局变量里的结果 ss = driver.execute_script("return window.confirmResult;") print(ss)
这样就能正确拿到true(确定)或false(取消)的结果了。
方法2:用Selenium内置的Alert类处理(自动化场景)
如果是要自动处理弹窗而不是手动点击,直接用Selenium的Alert API更靠谱,完全不需要依赖JS返回值:
# 触发confirm弹窗 driver.execute_script("confirm('Press a button!');") # 切换到弹窗实例 alert = driver.switch_to.alert # 点击确定,自己标记结果为True alert.accept() result = True # 要是点击取消,就标记为False # alert.dismiss() # result = False print(result)
这个问题在ChromeDriver的部分版本里比较常见,用上面两种方法都能完美解决~
内容的提问来源于stack exchange,提问作者Hello World
相关产品推荐
相关产品推荐

