Python Selenium提交表单关闭弹窗引发连接重置错误[WinError 10054]求助
解决弹窗提交后WinError10054连接重置且无法切回主窗口的问题
问题核心
提交弹窗表单后,弹窗立即关闭,但WebDriver仍保持与已关闭弹窗的会话连接,触发[WinError 10054]连接重置错误,此时直接在except里切换窗口会因为会话异常失效。
可行解决方案
- 等待窗口句柄数量恢复后切换:提交表单后,先等待弹窗完全关闭(窗口句柄数量变回初始的1个),再切换回主窗口,避免操作已失效的弹窗会话。
- 捕获特定异常而非全局异常:只捕获
ConnectionResetError,避免其他未知异常被掩盖,同时在捕获后重新确认主窗口句柄再切换。 - 优先使用表单原生提交方法:如果能定位到表单元素,直接调用
submit()方法,比模拟回车更稳定,减少弹窗关闭时的会话异常。
修改后的代码示例
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys default_window = driver.window_handles[0] # 切换到弹窗 driver.switch_to.window(driver.window_handles[1]) # 填写表单的代码... try: # 若能定位到表单,优先用原生提交 # driver.find_element(By.TAG_NAME, "form").submit() # 必须用回车模拟时执行以下代码 action.send_keys(Keys.RETURN).perform() # 等待弹窗关闭,窗口句柄数量回到1 WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 1) except ConnectionResetError: # 捕获连接重置错误后切换回主窗口 driver.switch_to.window(default_window) finally: # 确保最终回到主窗口 if driver.window_handles: driver.switch_to.window(driver.window_handles[0])
额外注意事项
- 避免使用裸
except,否则会掩盖元素定位失败等其他问题,只捕获明确需要处理的异常类型。 - 显式等待能确保弹窗完全关闭后再进行后续操作,避免因页面加载时序问题导致的错误。
内容的提问来源于stack exchange,提问作者Auke
相关产品推荐
相关产品推荐

