Python模擬鼠標和鍵盤操作實現重復性操作


前言

由於工作需要,要利用某軟件去采集數據,做重復的動作大概500多次。所以想寫一個程序代替人,去點擊和輸入。

一開始的思路有兩個:1、用Python或者windows對此軟件直接操作。2、利用Python模擬鼠標和鍵盤操作,模擬人工去操作此軟件。

第一種想法比較難實現,因為首先是沒有此軟件的接口,沒辦法進入它的后台。其次是Python沒有這樣的功能庫。

第二種想法容易實現,但是有一個問題,是Python沒辦法接收軟件的反饋,並作出判斷,只能按照既定的鼠標和鍵盤設置進行操作。


 

准備工具

“看鼠標”軟件

Python的PyUserInput庫(它的依賴庫有pyhook,pyhook的依賴庫為pywin32)

如果是在anaconda里面安裝pyhook的話,有可能還需要安裝個msgpack


 

實施

采集工具如下圖:

需要對它的界面點擊和輸入:“單位列表”→輸入單位編號→回車→“數據采集”(等待5-10秒)→“上一步”

然后循環這個操作

點擊的位置基本都是不變的,也不需要做判斷,所以用pymouse和pykeyboard來操作比較方便。

由於pymouse需要填寫鼠標的X,Y定位,所以需要利用一個叫“看鼠標”的小軟件去實行。

 

from pymouse import PyMouse
import time
from pykeyboard import PyKeyboard

def del_all():
    """
    清空文本框
    """
    k.press_key(k.control_key)  
    k.tap_key('A')  
    k.release_key(k.control_key)
    k.tap_key(k.delete_key)


def click_and_type(word):
    time.sleep(0.5)
    m.click(536, 531, 1)#點擊“單位列表”
    time.sleep(0.5)
    del_all()
    k.type_string(word)#輸入單位編碼
    time.sleep(1)
    k.tap_key(k.entry_key,1)#等它感應到對應單位后回車
    time.sleep(0.5)
    m.click(1121, 732, 1)#點擊“數據采集”
    time.sleep(10)#等待數據采集完畢,一般3秒左右完成,但需要預留多一點時間確保
    m.click(1119,738,1)#點擊“上一步”

#主體執行部分

list_num=['A1002002','B213212']#實際執行過程中有500多個單位,這里只展示兩個

m = PyMouse()
k = PyKeyboard()

m.click(1600, 900, 1)#顯示桌面
time.sleep(0.5)
m.click(324, 872, 1)#顯示軟件

for i in range(len(list_num)):
    word = list_num[i]
    click_and_type(word)

 

然后程序就自動化的執行起來。在這類小程序的測試階段,最好將腳本備份一下,將無關程序關閉。因為當你操作的小程序有意外情況時,你在強行停止程序的過程中有可能影響到腳本。


 

附言

在模擬的鼠標和鍵盤的時候,總是無法對程序的反饋做一個感應和判斷。譬如操作的程序彈出一個對話框,Python模擬鼠標鍵盤的程序也只能繼續跑下去。

雖然暫時沒有辦法感應到窗口,但是可以利用win32con和win32clipboard兩個庫,讀取到windows的剪切板,從而對軟件的文本進行一個讀取。這個也算是

一個交互的方式。下面將相關的腳本奉上,供大家參考。

import win32con
import win32clipboard as w

def get_text():
    """
    讀取剪切板
    """
    w.OpenClipboard()
    t = w.GetClipboardData(win32con.CF_TEXT)
    w.CloseClipboard()
    a = t.decode('ANSI')#部分文本需要這個解碼,顯示中文
    return a

 

good luck!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM