如何用pywinauto处理登录随机弹窗:有则点OK,无则跳过?
解决pywinauto登录时随机弹窗的处理问题
问题描述
使用pywinauto实现SYSPRO系统的数据录入自动化,登录后有50%概率会弹出需点击“OK”的警告窗口。当前脚本在弹窗存在时可正常点击按钮,但弹窗未出现时会因找不到控件报错,需实现「弹窗存在则点击,不存在则跳过」的逻辑。
解决方案
通过异常捕获+超时等待的方式处理,既保证弹窗出现时能及时点击,也能在弹窗未出现时跳过步骤继续执行:
修改后的代码
# 连接SYSPRO应用 app = Application(backend='uia').connect(title='SYSPRO') # 输入用户ID sysproId = app.SYSPRO.child_window(auto_id="2", control_type="ComboBox").wrapper_object() sysproId.type_keys("MYUSERID") # 输入密码 sysproPw = app.SYSPRO.child_window(auto_id="3", control_type="Edit").wrapper_object() sysproPw.type_keys("MYPASSWORD") # 点击登录按钮 sysproLogin = app.SYSPRO.child_window(title="Login", auto_id="6", control_type="Button").wrapper_object() sysproLogin.click_input() # 处理随机出现的OK弹窗 try: # 等待弹窗按钮出现,超时时间可根据实际加载速度调整 sysproContinue = app.SYSPRO.child_window(title="OK", auto_id="CommandButton_1", control_type="Button").wait('exists', timeout=3) sysproContinue.click_input() except Exception: # 弹窗未出现时直接跳过 pass # 后续菜单交互逻辑 # ...
关键说明
- 用
wait('exists', timeout)替代直接调用wrapper_object():该方法会在指定时间内等待控件加载,超时未出现则抛出异常 - 通过
try-except捕获异常:弹窗未出现时跳过点击步骤,不中断后续代码执行 - 超时时间可灵活调整:根据弹窗实际出现的延迟情况设置,确保弹窗有足够加载时间
内容的提问来源于stack exchange,提问作者Grayson Chee
相关产品推荐
相关产品推荐

