写一个SAPGUI自助登陆的python脚本程序(1)——提出及设计
前言
我们集团总共有5套SAP ECC系统,然后每套呢还分别有生产环境、测试环境、开发环境各一套。
也就说,像我这种日常做模块管理的话,生产及测试环境要频繁的切换,经常要反复登录大概八九套的环境。
SAP GUI登陆,然后不同的CLINET,账密要频繁的输入密码,而且本身后台密码策略也有要求,就你来回切换系统,很麻烦……
这个问题其实很困扰用户,所以后来basis做了单点的SSO登录,但是前提是你的客户端电脑要是加域才行。
我呢,整天用着自己的本本,所以没加域。
于是想说做一个自助的登录脚本,方便一些。
查询了一圈资料,发现还是有一些方法设计的。就行动起来~
设计思路
- 最初的思路是抓鼠标的x、y轴坐标,然后使用pyautogui去模拟键鼠的操作,执行鼠标单击、双击、回车、tab、输入文本、上下按键这些操作。
但是这样有个问题,就是GUI界面不能动位置,一旦gui窗口换了个位置,坐标定位就会有问题。脚本就会跑错…… - 后来呢查询了一圈,发现windows下的程序界面,都会对应到进程服务,都会有一个windows的句柄。
那么呢通过抓SAPGUI的句柄,就抓到对应的界面,然后用win32gui库去模拟键盘操作执行。 - 这里有个要注意的地方,就是并不是每个界面都能抓到句柄。可能和不同sap client的版本也有关系。
我实际最后做下来,有一些公司的测试client,是无法抓到的。我初步判断的是这些测试的client端版本有一些限制,所以抓不到。
实现步骤
大致实现的步骤:
- 打开SAPGUI.exe;抓到登陆gui的句柄。
- 在登陆gui里,搜索筛选器中输入登录的client,这里模糊搜索就够了。
- 进入client的登陆界面,然后抓到这个的句柄,定位到登陆界面。
- 输入账号密码,登陆。
后面再详细的写一下每一步大概都做了什么。