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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:06