Python模擬鼠標和鍵盤操做實現重複性操做

前言

因爲工做須要,要利用某軟件去採集數據,作重複的動做大概500屢次。因此想寫一個程序代替人,去點擊和輸入。小程序

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

第一種想法比較難實現,由於首先是沒有此軟件的接口,沒辦法進入它的後臺。其次是Python沒有這樣的功能庫。工具

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


 

準備工具

「看鼠標」軟件編碼

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

若是是在anaconda裏面安裝pyhook的話,有可能還須要安裝個msgpackcode


 

實施

採集工具以下圖:blog

須要對它的界面點擊和輸入:「單位列表」→輸入單位編號→回車→「數據採集」(等待5-10秒)→「上一步」接口

而後循環這個操做ip

點擊的位置基本都是不變的,也不須要作判斷,因此用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!

相關文章
相關標籤/搜索