因爲工做須要,要利用某軟件去採集數據,作重複的動做大概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!