如何使用SAP Gui脚本捕获文本?

2020-08-21 14:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Python通过修改记录的脚本来自动执行SAP登录过程。
但是我遇到了问题。 我不知道如何提取在SAP上找到的文本数据。


我正在做的一个过程是逐行从Inbox中提取信息。
如何使用脚本捕获文本? (信息记录,供应商,材料等)


我试图记录大多数步骤,但是我不知道如何捕获.text字段。
记录没有指出该部分。

 session.findById(" wnd [0]")。resizeWorkingPane(184,30,0)session.findById(" wnd [0]/tbar [1]/btn [36]")。press()会话。  findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [0]/shell")。selectedNode =" 2"#选择收件箱

 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectedRows =" 0"#选择第一行
 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectionChanged()
 print(session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。text)
#这东西打印出" SAPGUI.GridViewCtrl.1" ......
 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。pressToolbarButton(" DISP")
         session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。select()
         print(session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。text)

#这东西打印"文档内容" ......我需要获取(信息记录,供应商,材料等)


如果您查看SAP_Capture_3.png照片,我已经确定了外壳。 但是我无法获取它的文本数据...

 print(session.findByID(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [1]/shell" .. text)

上面的代码仅给我" SAP.HTMLControl.1" ...........我想要的内容。

请帮助我。

(83.5 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在使用Python通过修改记录的脚本来自动执行SAP登录过程。
但是我遇到了问题。 我不知道如何提取在SAP上找到的文本数据。


我正在做的一个过程是逐行从Inbox中提取信息。
如何使用脚本捕获文本? (信息记录,供应商,材料等)


我试图记录大多数步骤,但是我不知道如何捕获.text字段。
记录没有指出该部分。

 session.findById(" wnd [0]")。resizeWorkingPane(184,30,0)session.findById(" wnd [0]/tbar [1]/btn [36]")。press()会话。  findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [0]/shell")。selectedNode =" 2"#选择收件箱

 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectedRows =" 0"#选择第一行
 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectionChanged()
 print(session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。text)
#这东西打印出" SAPGUI.GridViewCtrl.1" ......
 session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。pressToolbarButton(" DISP")
         session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。select()
         print(session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。text)

#这东西打印"文档内容" ......我需要获取(信息记录,供应商,材料等)


如果您查看SAP_Capture_3.png照片,我已经确定了外壳。 但是我无法获取它的文本数据...

 print(session.findByID(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [1]/shell" .. text)

上面的代码仅给我" SAP.HTMLControl.1" ...........我想要的内容。

请帮助我。

(83.5 kB)
付费偷看设置
发送
7条回答
Baoming ROSE
1楼-- · 2020-08-21 14:36

Dong HYUN KIM

Hello Dong,在SAP社区中欢迎您。

据我了解,您想提取HTML控件的上下文。 请尝试以下操作:

浏览器= session.findById(" wnd [0]/usr/cntlHTML/shellcont/shell")。BrowserHandle
     HTMLDoc = browser.Document
     打印(HTMLDoc.body.innerText)
 

使用属性BrowserHandle获取Internet Explorer对象,在这里使用Document属性获取已加载的HTML文档。 最后但同样重要的是innerText属性,用于获取HTML控件的文本。

最诚挚的问候
Stefan

大简至美
2楼-- · 2020-08-21 14:17

这是一个问题。 GuiHtmlViewer 对象具有很少的方法和属性,您不能 阅读显示的文本。 我想您可以通过直接访问下面使用的名为" Microsoft Web浏览器"的OLE对象来做到这一点,但我只看到 Stefan Schnell 谁可以帮助您。

compass1988
3楼-- · 2020-08-21 14:20

Hello Dong,

此类文档的HTML如下所示:

 
   <头>
   
   <框架集>
     
   
  

因此您无法通过body.innerHtml获得文本,因为没有文本。

这里是获取完整HTML源代码:

 HTMLSource = HTMLDoc.GetElementsByTagName(" HTML")
 打印(HTMLSource [0] .outerHtml)
 

框架的location.href看起来像这样:

 saphtmlp://htmlviewer.sap.com/051MlPZb7kgUvZbDLR683m/HTML000001.HTM 

我不 我不知道如何处理这种协议来获取框架的内容。

我尝试使用屏幕抓取和OCR来获取文本,并且可行。

最诚挚的问候
Stefan

派大星 ヾ
4楼-- · 2020-08-21 14:32

是的....我从未成功读取显示的文本。
我曾经依靠下载整个数据进行读取。
但这确实使事情变得复杂。 。

我不知道使用OLE对象的确切脚本...。
我肯定会从Stefan Schnell寻求帮助。

愤怒的猪头君
5楼-- · 2020-08-21 14:32

亲爱的 Stefan Schnell

谢谢您的答复。
我已选择下载和读取数据的方法。

我将尝试以后建议的html方法。
谢谢您。

95年老男孩
6楼-- · 2020-08-21 14:35
 def saplogin():#此函数将登录到SAP并执行T代码


     尝试:
         #####步骤A:打开SAP
         路径= r" C:\ Program Files(x86)\ SAP \ FrontEnd \ SAPgui \ saplogon.exe"
         subprocess.Popen(path)#这将打开SAP
         time.sleep(4)#故意打开应用程序的时间


         SapGuiAuto = win32com.client.GetObject('SAPGUI')
         如果不是,则键入(SapGuiAuto)== win32com.client.CDispatch:
             返回


         应用程序= SapGuiAuto.GetScriptingEngine
         如果不是type(application)== win32com.client.CDispatch:
             SapGuiAuto =无
             返回
         连接= application.OpenConnection(" XXXXXXXXXXXXXXXXXXX",True)


         如果不是type(connection)== win32com.client.CDispatch:
             应用=无
             SapGuiAuto =无
             返回


         会话= connection.Children(0)
         如果不是type(session)== win32com.client.CDispatch:
             连接=无
             应用=无
             SapGuiAuto =无
             返回
        
         #####步骤B:登录到您的帐户
         session.findById(" wnd [0]/usr/txtRSYST-BNAME")。text =" XXXXXXXXXX"#用户ID
         session.findById(" wnd [0]/usr/pwdRSYST-BCODE")。text =" XXXXXXXXXX"#密码
         session.findById(" wnd [0]")。sendVKey(0)
         session.findById(" wnd [0]")。sendVKey(0)#附加回车键以获取过去的法规遵从性味精
        
        
         #####步骤C:进入SAP Business Workplace
         session.findById(" wnd [0]")。sendVKey(36)#Ctrl + F12
        
         #####步骤D:选择收件箱
         session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [0]/shell")。selectedNode =" 2"
        
        
         #####步骤E:选择相关行
         session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectedRows =" 0"
         session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。selectionChanged()
         打印("测试1")
         print(session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell" .text)
         打印("测试2")
         打印(session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]")。文本)
         打印("测试3,我需要此数据")
         打印(session.findByID(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [1]/shell")。文本)
         browser1 = session.findByID(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [1]/shell")。BrowserHandle
         HTMLDoc1 = browser1.Document
         打印("测试4我真的需要此数据")
         打印(HTMLDoc1.body.innerText)
        
         #####步骤F:尝试通过单击"显示"按钮获取数据
         session.findById(" wnd [0]/usr/cntlSINWP_CONTAINER/shellcont/shell/shellcont [1]/shell/shellcont [0]/shell")。pressToolbarButton(" DISP")
         session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。select()
         打印("测试5")
         打印(session.findById(" wnd [0]/usr/tabsSO33_TAB1/tabpTAB1")。text)
         打印("测试6")
         打印(session.findById(" wnd [0]/usr/tabsSO33_TAB1")。text)
         time.sleep(2)#故意延迟
         session.findById(" wnd [0]")。sendVKey(15)

     除:
         打印(sys.exc_info()[0])


     最后:
         会话=无
         连接=无
         应用=无
         SapGuiAuto =无
        
        
        
 saplogin()

 

下面是我得到的输出。
基本上,在"测试4"下,我什么都没得到

测试1

SAPGUI.GridViewCtrl.1

测试2

SAPGUI.CONTAINERCTRL.1

测试3我需要此数据

SAP.HTMLControl.1

测试4

我真的需要这些数据

测试5

文档。 内容

测试6

先生,请帮助我。

一周热门 更多>