之前寫過這樣一篇介紹按鍵精靈的文章:
按鍵精靈實例 – 志願者打卡後臺設置一鍵搞定
,大意就是通過按鍵精靈來模擬鼠標鍵盤操作,完成一系列的繁瑣操作。今天來給大家分享一下用python模擬鼠標鍵盤操作的實例,相比而言python提供的功能更爲強大也更爲簡便一些。
需求背景
情況是這樣的,需要將一批“身份證號碼”和“手機號碼”(約400多個)一個一個在某個系統平臺進行登錄操作(只需要進行登錄即可,這個目的本身就很費解),這個平臺如下:
部分賬號截圖如下:
輸入完成後,點擊登錄,進入下圖界面,然後點擊“切換”,再進行下一個賬號登錄即可。
依次將表格裏面的所有400多個“身份證號碼”和“手機號碼”都按上面的步驟登錄一遍,即完成任務。
問題分析
就單這個任務而言,除了繁瑣、浪費時間一些,其他的貌似也沒有什麼難的地方(其實最疑惑的就是做這個事情本身的目的何在,但就是有某些領導要求這麼幹,姑且也就撇開不說。)
python裏面有多個可以操作鍵盤和鼠標的庫,永恆君這裏使用的是pyautogui
。
上面的一系列操作,主要就是由下面的這些動作構成的:
1)移動鼠標,x,y 表示要移動的座標位置,0.25表示完成這個移動的總時間
pyautogui.moveTo(x, y, duration=0.25)
2)單擊鼠標,left表示左鍵,right則是右鍵
pyautogui.click(button='left')
3)鍵盤輸入內容,“abc”爲輸入的內容字符,0.1表示輸入每個字符間隔的時間
pyautogui.typewrite(“abc”,0.1)
4)讀取excel中“身份證號”和“手機號”,這裏直接只用pandas庫
pandas.read_excel("id_phone.xlsx")
整個操作過程就是這樣:
1)讀取excel獲取所有的“身份證號”和“手機號” ;
2)鼠標移動到“身份證號”的位置,單擊左鍵,輸入第一個“身份證號”;
3)鼠標移動到“手機號”的位置,單擊左鍵,輸入對應的第一個“身份證號”;
4)點擊登錄,鼠標移動到“切換”的位置,點擊;
5)重複2-4步,依次輸入後面的“身份證號”和“手機號”
問題解決
這裏首先一個問題,鼠標移動的位置的座標如何來確定?比較簡單的方法是使用微信的截圖工具,點開後,鼠標旁邊有個小框,POS就是顯示當前的鼠標座標,如下圖:
你只需要移動到對應的位置,記錄座標值即可,像永恆君這樣:
id_position = (525, 302) #id位置
phone_position = (579, 378)#輸入電話位置
login_position = (618, 469)#點擊登錄位置
change_account_pos = (788,206)#點擊切換位置
接下來是讀取excel獲取所有的“身份證號”和“手機號”
df = pd.read_excel("id_phone.xlsx")
id_num = df["身份證號碼"].astype("str")
phone_num = df["聯繫電話"].astype("str")
然後是移動並輸入“身份證號”、“手機號碼”,這裏直接定義兩個函數來表示這個輸入動作。
def input_id(x,y,id_num): #輸入身份證號的動作
pyautogui.moveTo(x, y, duration=0.25)
pyautogui.click(button='left')
time.sleep(0.5)
pyautogui.typewrite(id_num,0.1)
time.sleep(0.5)
def input_phone(x,y,phone_num):#輸入電話號碼的動作
pyautogui.moveTo(x, y, duration=0.25)
pyautogui.click(button='left')
time.sleep(0.5)
pyautogui.typewrite(phone_num,0.1)
time.sleep(0.5)
接着是“登錄”、“切換”,同樣也是定義兩個函數。
def login(x,y):#登錄的動作
pyautogui.moveTo(x, y, duration=0.25)
pyautogui.click(button='left')
time.sleep(0.5)
pyautogui.moveRel(-8, -36, duration=0.25)
pyautogui.click(button='left')
time.sleep(5)
def change_account(x,y):#切換賬號的動作
pyautogui.moveTo(x, y, duration=0.25)
pyautogui.click(button='left')
time.sleep(0.5)
pyautogui.moveRel(-108, 94, duration=0.25)
pyautogui.click(button='left')
time.sleep(0.5)
最後將上面的所有動作都整合起來用一個函數表示,方便進行調用,即進行一次登錄操作需要進行的所有步驟。
def accouts_login(id_num,phone_num):#從登錄並切換賬號的完整動作
input_id(id_position[0], id_position[1],id_num)
input_phone(phone_position[0], phone_position[1],phone_num)
login(login_position[0], login_position[1])
change_account(change_account_pos[0],change_account_pos[1])
效果演示
操作的步驟之間,永恆君加了一些等待時間,避免出現網絡、平臺的延時、卡頓造成的錯誤,自然運行的時間也會增加。
如果手工輸入的話,完成一個平均要花費20s以上。用python的話,只需要大約10s左右,能節省至少一半的時間,還是不錯的。
如果你感興趣的話,可以wx公號後臺回覆“重複操作”獲取源文件,如果有需求或者疑問的話,隨時歡迎聯繫我來交流!