一個關於遠端控制桌面的工具

SpuerHook發表於2021-01-05

哈嘍阿,各位社群的老鐵們~

經過上次跟各位的深入交流,發現用 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.初始化應用狀態

在上一條用例失敗後,可能會出現其他的視窗,會導致下一個用例失敗。
然後又加了一個功能,就是把失敗後可能出現的畫面都擷取下來,然後逐個點選關閉視窗。
感覺這個方法很笨,各位社群的老鐵如果有更好的辦法還請不吝賜教。

基本上也就這樣了,問題還有很多,但是爭取搞成一個能拿的出手的東西。

最後說說我的現狀

由於我所在產品線自動化測試就我一人,而且還不隸屬開發部門。
很多程式碼問題只能自己想,自己查。工作狀態很自閉。基本屬於閉門造車。
最近開發完了手頭這個專案的自動化指令碼,內心深感疲憊。喪失了之前的鬥志。
感覺自己可能需要換換環境了。

相信未來還是會好起來的!😃

相關文章