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

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

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

经过上次跟各位的深入交流,发现用 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 · #1 · 2021年06月24日 Author
仅楼主可见
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册