使用pywin32操作SAP GUI时出现COM Error及属性错误求助
问题排查与解决办法
1 校验SAP GUI脚本权限配置
SAP GUI版本更新、Windows组策略同步后会自动重置脚本配置,是突发报错的最常见原因:
- 打开SAP GUI客户端,进入左上角「选项」菜单
- 依次进入「辅助功能和脚本」→「脚本」分类
- 确认已勾选「允许脚本执行」,同时取消勾选「脚本附加到SAP GUI时发出通知」「脚本打开连接时发出通知」两个选项即可
2 修复代码语法问题
现有代码存在两处语法错误会直接触发报错:
- 顶部缺失
os库导入语句,使用os.path.join前需要先加import os - 事务码赋值行的
findById参数引号未闭合,原代码session.findById("wnd[0]/tbar[0]/okcd)需修正为session.findById("wnd[0]/tbar[0]/okcd")
3 优化对象加载逻辑
现有逻辑在获取到session对象后直接操作,此时SAP窗口还未完成渲染,COM对象属性未完全加载,会触发调用异常:
- 成功获取session对象后增加3-5秒的等待时间,也可以增加对象可用性校验,参考代码如下:
# 原有获取session的逻辑结束后追加 time.sleep(3) # 校验窗口对象可用 try: main_wnd = session.findById("wnd[0]") # 尝试读取属性确认对象加载完成 _ = main_wnd.Type except: time.sleep(2) main_wnd = session.findById("wnd[0]") main_wnd.maximize() session.findById("wnd[0]/tbar[0]/okcd").text = "对应事务码"
4 其他排查方向
- 确认昨日是否有Windows系统补丁更新、SAP GUI补丁更新、pywin32库版本变更,若为依赖更新导致的问题,回退到之前正常运行的版本即可
- 确认SAP账号权限未发生调整,部分权限变更会限制脚本对界面元素的读写权限
- 脚本运行过程中不要手动操作SAP GUI窗口,手动抢占焦点会导致COM调用失败
内容的提问来源于stack exchange,提问作者Cassian Raja
相关产品推荐
相关产品推荐

