记录桌面端应用的自动化的一些坑和解决方式
早些年做过桌面端应用的自动化,最近几年因为公司的业务发展,桌面端应用做了起来,于是也需要像web、app、api之类的把桌面端的自动化做起来。
主要是windows的应用,会用到win32接口和一些封装后的包,加上自己的定义。这里记录了一篇入门:Python自动化操作windows桌面软件 ,当然实际的封装还是比较多的,也有一些特殊处理,这里记录一些坑。
1. win32的事件不被应用的少许控件接受,无响应回馈,这个比较容易解决,就是模拟真实鼠标行为,当然这个尽量少一些,因为会造成不稳定因素。
2. 在不同电脑上运行时,操作有偏差。这个也好解决,需要把电脑的缩放都改成100%。
3. 应用集成了第三方收费控件,不是直接用winform做出来的,会难以解析该区域的元素类别。这个麻烦一些,一旦涉及的业务较重要,这个就尽量要自动化。目前的解决方式是采用视觉的方案,这个细节我后面更新,效果还可以,效率一般,但比什么都做不了的好。
4. 将写好的脚本放到虚拟机上跑的时候,经常出现异常报错,无论是鼠标事件还是截图事件,报错的信息跟win32ui有关的居多。这个问题后来发现在一直保持连接远程虚拟机时不出现,报错有包含'no active desktop'的信息,确定了是因为有的事件是需要真实桌面渲染展示,而断开连接后就无法维持了。但是又不能一直连接着好些个远程虚拟机。于是把下面的代码编辑到一个bat文件中,在打算退出远程连接的时候用管理员权限运行,会自动退出连接但保持了真实桌面,目前看到异常报错消失了。通过%windir%\System32\tscon.exe RDP-Tcp#*NNN* /dest:console手动断开RDP的话,原桌面也不会休眠,其中NNN是当前远程桌面的session。
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
%windir%\System32\tscon.exe %%s /dest:console
)
下一篇:
Systemd管理gunicorn服务