python调用SAPexe执行文件报-2147352567,‘发生意外‘错误信息

现象:

      自动化在调用SAP EXE可执行文件时,程序调用起来了,但是进行用户登录时报:pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3', (614, u'saplogon', u'The enumerator of the collection cannot find en element with the specified index.', u'C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.HLP', 393215, 0), None),大概意思是找不到en的元素位置,所以导致失败,登录SAP源码为:

def open_SAP(self):
    # 关闭本地进程
    time.sleep(1)
    self.close_SAP()
    # 打开SAP
    sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
    subprocess.Popen(sap_app)
    time.sleep(1)
    flt = 0
    while flt == 0:
        try:
            hwnd = win32gui.FindWindow(None, "SAP Logon 750")
            flt = win32gui.FindWindowEx(hwnd, None, "Edit", None)
            time.sleep(3)
        except:
            time.sleep(0.5)
    # win32gui.SendMessage(flt, win32con.WM_SETTEXT, None, "GMD")
    win32gui.SendMessage(flt, win32con.WM_SETFOCUS, 0, 0)
    win32gui.SendMessage(flt, win32con.WM_CHAR, ord('G'), 0)
    win32gui.SendMessage(flt, win32con.WM_CHAR, ord('M'), 0)
    win32gui.SendMessage(flt, win32con.WM_CHAR, ord('D'), 0)
    time.sleep(1)
    # 获取登录按钮并点击
    dlg = win32gui.FindWindowEx(hwnd, None, "Button", None)  # 登陆(0)
    win32gui.SendMessage(dlg, win32con.WM_LBUTTONDOWN, 0)
    win32gui.SendMessage(dlg, win32con.WM_LBUTTONUP, 0)
    time.sleep(2)
    # /app/con[0]/ses[0]/wnd[0] 窗体结构
    SapGuiAuto = win32com.client.GetObject("SAPGUI")

    application = SapGuiAuto.GetScriptingEngine
    connection = application.Children(0)
    time.sleep(6)
    self.session = connection.Children(0)

代码执行到self.session这步报错,已经打开了SAP程序,但是登录具体用户就报错

 

分析:

因为SAP是第三方系统,我们自动化登录只是调用SAP的VB语言,于是手动打开SAP进行登录,想将登录脚本重新修改,想进行脚本录制与回放,发现此按钮置灰不可点击,只能不停的去百度优快云,不停的查询github,还是解决不了。

于是乎,将SAP登录环境更换地址,发现跑成功了,其他SAP地址是可以进行脚本录制与回放,于是猜想大概率是因为无法录制导致元素找不到

解决:

百度下如何将此按钮变为可用。具体步骤如下,此处直接上图:

1:登录进去,输入事务代码:RZ11

2.输入参数名称:sapgui/user_scripting,回车

3.选择更改值:

4.将新值设置为:TRUE

设置完成之后,脚本录制与回放按钮可以正常点击

再次跑脚本,可以正常找到元素位置,问题解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值