自动化工具 一个关于远程控制桌面的工具

SpuerHook · 2021年01月05日 · 最后由 SpuerHook 回复于 2021年06月24日 · 8068 次阅读

哈喽阿,各位社区的老铁们~

经过上次跟各位的深入交流,发现用 vnc 这种东西实现自动化点点点始终不是那么回事。
因此就用 python3 写了一个远程操控桌面的小工具。

因为需要在国产系统上使用,国产系统安装各种依赖是比较痛苦的。
所以这个工具要尽可能少的去依赖其他的第三方库。

主要思路:

1,待测的客户端起一个 tcp 服务
2,服务端通过这个服务获取客户端的截屏
3,服务端根据截图定位客户端的桌面坐标
4,服务端向客户端发送定位坐标及需要执行的鼠标或键盘动作的请求
5,客户端接收请求并执行相应动作

主要问题及解决方案:

1,如何截屏: linux 可以通过 PyQt5 这个库使用 QT5 实现,没有 QT5 的系统通过键盘上的 PrintSc 实现

2,如何通过截图定位坐标:通过 @shixue33 大佬的点播,看了一下 airtest 的源码,对我来说这个中文注释可是太友好了。
主要使用 airtest 的 find_template 方法实现的。原理还是 opencv,只不过 airtest 已经封装好了。

3,如何控制键盘鼠标: linux 通过 Xlib 这个库实现。

以上这些东西基本度娘都有,而且相对其他工具来讲在国产系统上还是比较容易安装的。很多基本上都是自带了。
所以就少了很多解决到天灵盖儿发麻的依赖问题。

基本的功能都验证过了,还没进行具体的业务使用。
接下来会尝试使用一下,看看效果。
各位老铁等我消息。

=============================================

流光一瞬,华表千年。半年的时间就这么过去了。

缝缝补补,修修改改这个小工具也算用了起来
整体状态一般,仅仅处在一个能用的水平上。
工具相对简单,更多的是在项目上进行的二次封装。

说一说修改与需要关注的地方

1. 关于截屏

之前采用 qt 截屏,备用方案为键盘的 PrintSC 实现,由于后者的效率太低已经弃用。
现在是 qt 截屏转为二进制直接响应。
python 使用 qt5 在 linux 上截屏有个小坑,如果在函数里导包,第二次调用这个函数的时候会有一个段错误的报错。

2.图片识别率

工具上现在使用 airtest 的模板匹配,很单一但是识别效果还是可以接受的。
令人难受的是如果环境多的话需要每个环境截一份定位图片。
也测试过使用特征点匹配,在我的现有项目上效果不太好。暂时没有加进去,后期为了提高识别率可能会加进去。
这方面感兴趣的小伙伴可以去看看 airtest 源码,常用的特征点匹配算法都有。

3.尝试加入记录坐标的小功能

有一个问题,如果图片已经出现了但是没识别到该怎么办?
遂加入了一个小功能,如果此次图片识别成功会记录坐标,如果下次识别失败会获取对应坐标后执行相应动作。
经过验证,这个功能属实没啥用。

4.初始化应用状态

在上一条用例失败后,可能会出现其他的窗口,会导致下一个用例失败。
然后又加了一个功能,就是把失败后可能出现的画面都截取下来,然后逐个点击关闭窗口。
感觉这个方法很笨,各位社区的老铁如果有更好的办法还请不吝赐教。

基本上也就这样了,问题还有很多,但是争取搞成一个能拿的出手的东西。

最后说说我的现状

由于我所在产品线自动化测试就我一人,而且还不隶属开发部门。
很多代码问题只能自己想,自己查。工作状态很自闭。基本属于闭门造车。
最近开发完了手头这个项目的自动化脚本,内心深感疲惫。丧失了之前的斗志。
感觉自己可能需要换换环境了。

相信未来还是会好起来的!😃

共收到 13 条回复 时间 点赞

只要思想不滑坡,办法总比困难多。

开源吗?

对 stevenxu 回复

用一段时间看看效果。
用着还行的话会考虑开源。

需要特定的客户端去连接使用吗?

对 甬力君 回复

就是需要在客户端启动一个 tcp 服务,已经是写好的,在客户端运行一下就行了。

我也做了一个网页版客户端的,在 linux 上跑个 web 服务,网页上输入用户名和密码登录,也是 python 写的,用 flask 实现的,数据走 websocket

对 甬力君 回复

我之前也考虑过用 flask,但是后来想想没必要,直接用标准库里的 tcpserver 就够用了。

大佬, 我最近也接到任务要做我们这边 3d 打印机页面的自动化测试,基于 ubuntn 服务版 +qt,界面显示在面板上,无桌面。我通过截图方法,或者 vnc 都看不到 qt 的界面,已经搞了好多天了,老板已经追到屁股后面,求指导,万分感谢!!!

僅樓主可見
对 mile1944 回复

这个我可能帮不到你呀。ubuntu 没有 GUI 界面,那应该是捕捉不到屏幕,QT 也就无法截图。

SpuerHook · #13 · 2021年06月24日 Author
僅樓主可見
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册。