前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python实现桌面自动化

用python实现桌面自动化

作者头像
赵云龙龙
发布2021-11-16 14:40:38
1.5K0
发布2021-11-16 14:40:38
举报
文章被收录于专栏:python爱好部落python爱好部落

好久没写文章了。主要是最近换了工作。工作太忙,闹心的事情也很多的。自己还在熟悉新的环境,新的业务。

好消息是,可能会有更多,更不一样的沉淀分享出来。像Go, docker,k8s,人工智能,高可用,海量数据,国产化,全链路压测,安全测试等等,当然还得沉淀沉淀,请耐心等待。

坏消息是,可能更新的频率说不准了。

先简单说说现在的工作,刚过试用期,头三个月还是蛮难受的,主要是管理有些混乱,团队有些人躺平,要驱动这些人干活,比较难受,然后线上问题太多,感觉自己就是一个客服和传达指令,以及跑腿的。还好内心够强大,一切都挺过来了。

现在公司主要是做平台的,都是做企业级的客户,很牛叉的客户太多,财神爷不好得罪,自己学习总结的时间有限,大部分时间被内耗和琐事牵扯了。

这边我要负责桌面的团队。感觉这边团队自动化就是0.

UI的确是也不是很好做,特别是兼容这些平台。

好了,废话不多说,最近发现微软的一个桌面测试框架,uiautomation, 跟uiautomator就差一点,有种似曾相识的感觉。

安装

代码语言:javascript
复制
pip install uiautomation

程序启动

代码语言:javascript
复制
subprocess.Popen(args='D:\Release\Higemi.exe',cwd=r"D:\Release")

窗口定位

代码语言:javascript
复制
cas = automation.WindowControl(searchDepth=1, AutomationId='myMainWindow', Name='Login')

控件定位

代码语言:javascript
复制
login=cas.ButtonControl(AutomationId ="btn_login")

鼠标动作

代码语言:javascript
复制
automation.Win32API.MouseClick(600,250)
automation.Win32API.MouseWheelDown(2)

如果要定位元素,可以用以下命令。或者用Inspector,Spy++等windows工具,

代码语言:javascript
复制
#在超时时间内寻找指定的窗口或控件,找不到则抛出异常
automation.WaitForExist(cas, 3) 

automation.py –t3, 3 秒后遍历当前窗口所有控件
automation.py –d2 –t3, 3 秒后遍历当前窗口前三层控件
automation.py –r –d1 –t0 -n, 0 秒后遍历 root 的第一层子控件,并显示控件完整名称
automation.py –c –t3, 3 秒后遍历鼠标光标下面的控件信息
automation.py –c –t3 -d-2, 3 秒后遍历鼠标光标下面的控件向上两层的父控件

并且自带控件查看工具,比 Windows 自带的 Inspector.exe 更加好用: 运行 CMD,输入 automation.py -t3 回车,然后 3 秒内切换到应用界面。

感觉找的元素,定位的元素也是有限的。

可以用如下方式来操作控制元素。

如果:

代码语言:javascript
复制
root(Name='Desktop', Depth=0)
  window1(Depth=1)
    control1-001(Depth=2)
    control1-...(Depth=2)
    ...
    control1-100(Depth=2)
  window2(Name='window2', Depth=1)
    control2-1(Depth=2)
      control2-1-001(Depth=3)
      control2-1-...(Depth=3)
      ...
      control2-1-100(Depth=3)
    control2-2(Depth=2)
    control2-3(Depth=2)
    control2-4(Name='2-4', Depth=2)
      editcontrol(Name='myedit1', Depth=3)
      editcontrol(Name='myedit2', Depth=3)

如果你想查在 'hi'里ditControl 找名为 'myedit2' , 代码可以这么写:

代码语言:javascript
复制
uiautomation.EditControl(searchDepth=3, Name='myedit2').SendKeys('hi')

如果前面有200个controls,这样查找的性能就相当慢。 这样写就性能好一点:

代码语言:javascript
复制
window2 = uiautomation.WindowControl(searchDepth=1, Name='window2') # search 2 times
sub = window2.Control(searchDepth=1, Name='2-4')    # search 4 times
edit = sub.EditControl(searchDepth=1, Name='myedit2')   # search 2 times
edit.SendKeys('hi')

你也可以组合起来写。

代码语言:javascript
复制
uiautomation.WindowControl(searchDepth=1, Name='window2').Control(searchDepth=1, Name='2-4').Edi

总体用下来,马马虎虎。很多元素定位不到,或者窗口定位不到。

但是也有好处,像右键,像某些控件,可以定位到,比别的工具好用,所以我打算结合pyautogui, winappdriver. 这样各取所长,就能达到我的目的了。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档