前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows GUI自动化怎么做

windows GUI自动化怎么做

作者头像
赵云龙龙
发布2022-12-01 15:45:54
2.2K0
发布2022-12-01 15:45:54
举报
文章被收录于专栏:python爱好部落

最近在搞SAP的自动化。因为公司没考虑预算,不能用RPA。 首先用SAP自带的录制工具,不太行,各种弹框没法处理。 思来想去,打算用python来整。先用tracker来录制,创建业务流程还好,但是一旦要处理弹框,上传附件,就有点吃力了。 然后用了python的一些库来对付。 pyperclip 剪切板 pymouse 鼠標操作 pykeyboard 鍵盤曹祖 win32com win32gui pyautogui pywinauto uiautomation pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。 pythoncom是pywin32库的一部分,运行脚本后,即可通过键盘的上下左右键控制鼠标移动了 pyhook 監聽輸入操作 pynput这个库让你可以控制和监控输入设备 这些库各有千秋,让我分別道来。

UIautomation

1.uiautomation的安装

代码语言:javascript
复制
pip install uiautomation

2.uiautomation的使用   在cmd中运行automation.py -t 3 #3秒后遍历最上层窗口的控件 -f, 抓取焦点处控件 -n, 显示控件的完整name -c, 遍历光标下的控件 -d,遍历的层级

代码语言:javascript
复制
  import uiautomation as auto
  window=auto.WindowControl(ClassName="CabinetWClass",searchDepth=1)  #控制面板窗口  window.SwitchToThisWindow()     # 切换窗口

Uiautomation元素获取方法如下 程序窗口:uiautomation.WindowControl 按钮:uiautomation.ButtonControl 文本:uiautomation.TextControl 输入窗口:uiautomation.EditControl 文档控件:uiautomation.DocumentControl 单选控件:uiautomation.CheckBoxControl 复选控件:uiautomation.ComboBoxControl 日历控件:uiautomation.CalendarControl

可以通过spy++来查看Control type

Uiautomation元素的属性

ClassName、Name、ProcessId、AutomationId、searchDepth 常用的操作有

DoubleClick()双击 Click()单击 RightClick()右键点击 SendKeys()发送字符

优点是,可以深层次遍历各个元素,你只需要提供元素名称,或者class,然后提供层数就可以了。 缺点是要层层遍历,性能变低,还需要开一个窗口,有时候窗口不是很稳定。基本上元素都會解析出來,不穩定是因爲有太多類似的。

pyautogui

pyautogui 模块主要用于屏幕控制(获取屏幕尺寸、截屏等)、鼠标控制(移动鼠标、单击、双击、右击、拖拽、滚动等)、键盘控制(编辑、按键等)。如果有元素搞不定,可以用這個來截圖定位。 这个模块之前讲过,就不在这里重复了。

pywin32

Python 没有自带访问 windows 系统 API 的库的,需要下载 pywin32,pywin32 是一个第三方模块库,主要的作用是方便 python 开发者快速调用 windows API 的一个模块库。它直接包装了几乎所有的 Windows API,可以方便地从 Python 直接调用 pywin32 安装:pip install pywin32

win32api :模块内定义了常用的一些 API函数,例如:MessageBox win32gui :模块内定义了一些有关 图形操作的API,例如:FindWindow win32con :模块内定义了 windows API 内的宏,即 宏常量。例如 MessageBox 内的 MB_OK win32file:提供了有关文件操作的API pywin32 包含 win32gui、win32api、win32con 3个子模块,主要用于窗口管理(定位窗口、显示和关闭窗口、窗口前置、窗口聚焦、获取窗口位置等),通常用的较多的是 win32gui

代码语言:javascript
复制
hld = win32gui.FindWindow(None,u"Adobe Acrobat") #返回窗口标题为Adobe Acrobat的句柄通过父窗口句柄获取子句柄#parent为父窗口句柄iddef get_child_windows(parent):

下面重点讲这个库

pywinauto

pywinauto 模块主要用于应用控制(打开、关闭应用等)窗口控制(最大化、最小化窗口等),也可以等位到控件,并对控件进行操作,如点击、编辑等。

对于 pywinauto 模块,主要使用其中的 Application 类,需要导入包,并定义一个 Application 类的对象。

代码语言:javascript
复制
start(self, cmd_line, timeout=app_start_timeout) # 默认超时时间为5sapp = Application(backend = 'uia').start(r"E:\Office\Office14\EXCEL.exe")

查找/调用窗口 通过工具spy++lite查看窗口的类名和标题文字...

这里先介绍官方文档的两种方法:

(1)通过top_dlg = app.top_window_() 来获取最上面的window(不推荐,如果有新进程,就会得到错误对象)

(2)通过find_dlg = app.window_(title_re = ‘ ’, class_name = ‘ ’) 方法获得,title_re和 class_name这两个可以单独使用也可以一块使用,因为有时没有标题文本,也有时一个窗口类名有多个对象;

(3)通过dlg_spec = app.window(title='')

或者app.window(title_re=’’)

如果需要处理菜单: MenuSelect方法自动检索Notepad上的菜单选项 例如:点击“帮助->关于记事本”操作; app.Notepad.MenuSelect('帮助->关于记事本')

项目在企业微信PC版样式有点兼容问题,如果不能在企业微信直接调试,那效率非常低,问题又不容易定位到,企业微信设置里又没有开发者模式开关,就在我无从下手的时候,发现一个快捷键能打开调试模式

第一步:

ctrl + alt + shift + D,会有弹框提示已开启

第二步:

在企业微信里打开H5页面,右键-检查元素,Ctrl+shift+i 就可以调试了

可以用如下工具来定位元素: Scripting Tracker, 这个主要是用在sap中的,点击鼠标,可以指到元素上。 spy++ inspect

好了,介绍了这么多工具,到底怎么用呢? 一般如果元素控件很多,层级很深,可以用到uiautomation; 当然pywinauto也可以实现,但是需要一层一层定位。 如果需要下拉框,pywinauto,uiautomation都是不错选择。 pyautogui可以用在定位不到元素的地方,用图像或者坐标来定位,也可以操作鍵盤,快捷鍵。 win32gui可以辅助操作窗口。 定位元素一般可以用classname,title,name,instence,controltype都可以正則來實現。

参考:https://www.zhihu.com/column/c_1468529809685307392?page=2 https://pywinauto.readthedocs.io/en/latest/controls_overview.html#dialog

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UIautomation
  • pyautogui
  • pywin32
  • pywinauto
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档