之前寫過這樣一篇介紹按鍵精靈的文章:
按鍵精靈實例 – 志愿者打卡后臺設置一鍵搞定
棘催,大意就是通過按鍵精靈來模擬鼠標鍵盤操作劲弦,完成一系列的繁瑣操作。今天來給大家分享一下用python模擬鼠標鍵盤操作的實例醇坝,相比而言python提供的功能更為強大也更為簡便一些邑跪。
需求背景
情況是這樣的,需要將一批“身份證號碼”和“手機號碼”(約400多個)一個一個在某個系統(tǒng)平臺進行登錄操作(只需要進行登錄即可呼猪,這個目的本身就很費解)画畅,這個平臺如下:
部分賬號截圖如下:
輸入完成后,點擊登錄宋距,進入下圖界面轴踱,然后點擊“切換”,再進行下一個賬號登錄即可乡革。
依次將表格里面的所有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["聯(lián)系電話"].astype("str")
然后是移動并輸入“身份證號”、“手機號碼”绽诚,這里直接定義兩個函數(shù)來表示這個輸入動作典徊。
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)
接著是“登錄”、“切換”恩够,同樣也是定義兩個函數(shù)卒落。
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)
最后將上面的所有動作都整合起來用一個函數(shù)表示,方便進行調用蜂桶,即進行一次登錄操作需要進行的所有步驟儡毕。
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])
效果演示
操作的步驟之間,永恒君加了一些等待時間扑媚,避免出現(xiàn)網絡腰湾、平臺的延時雷恃、卡頓造成的錯誤,自然運行的時間也會增加费坊。
如果手工輸入的話倒槐,完成一個平均要花費20s以上。用python的話葵萎,只需要大約10s左右导犹,能節(jié)省至少一半的時間,還是不錯的羡忘。
如果你感興趣的話谎痢,可以wx公號后臺回復“重復操作”獲取源文件,如果有需求或者疑問的話卷雕,隨時歡迎聯(lián)系我來交流节猿!