事情是這樣的,我知道淘寶上有賣一種USB接口的大按鈕,估計是給工廠或者醫院之類的場景設計的,樣子長這樣:
然后我就一直挺想搞一個的,不為別的,就是玩,但是想來想去也沒想到這玩意兒對我而言能有啥用途,就暫且擱置了這個想法。直到這幾周來,每次發現辦公室桶裝礦泉水被喝完了之后,都需要微信通知訂水師傅來送水,就萌生了個想法,我何不搞個誇張的大按鈕,每次訂水的時候直接拍一下按鈕然后自動發送消息呢?
然后就是可行性研究,需要確認的地方有這些:
1. 如何實現自動發送微信消息?
2. 如果第一步可以,那如何通過這個按鈕調用我寫好的自動發消息的腳本?
關於如何發送微信消息這里,我粗略的查了下,發現微信這個壞東西比QQ還要嚴,壓根不存在QQ機器人這類的框架或工具的,網頁版微信也早就被拋棄了,沒有API可以調用(其實也正常,真要出個能模擬用戶的API,黑產不樂瘋了)。那么咋辦呢?
答案是Python的pyautogui圖像自動化庫。
哎呀,雖然以前就聽說過什么“人生苦短,我用Python”這類的話,但是之前也沒咋認真接觸過,而這不看則已,一看驚人啊,這個Python的圖像自動化庫簡直神器,完美契合了我的需求,他可以根據你提供的圖片,自動在屏幕上尋找相似的地方,然后返回坐標,得到目標的具體坐標了豈不是什么都能干了。
第二個問題則更好解決,找一個可以自定義快捷鍵的大按鈕即可。
然后就在網上找pyautogui這個庫的代碼,依葫蘆畫瓢的寫了一個打開微信並發送消息的腳本:
# coding=utf8
import pyautogui
import pyperclip
import time
contacter = "訂水"
msg = '送兩桶水,麻煩收到回復'
#打開微信
location=pyautogui.locateCenterOnScreen('WeChat.png',confidence=0.9)
if location is not None:
print('打開微信')
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
#搜索訂水
location=pyautogui.locateCenterOnScreen('search.png',confidence=0.7)
if location is not None:
print('搜索用戶')
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
pyperclip.copy(contacter)
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
#打開聊天窗口,輸入文字
location=pyautogui.locateCenterOnScreen('contacter.png',confidence=0.7)
if location is not None:
print("打開聊天框")
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
#time.sleep(1)
#焦點在輸入框,輸入文字
location=pyautogui.locateCenterOnScreen('input.png',confidence=0.7)
if location is not None:
print("輸入文字並發送")
pyautogui.click(location.x,location.y,clicks=1,interval=0,duration=0.2,button='left')
pyperclip.copy(msg)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
print("結束")
關於發送消息的那個地方,這個庫就有些力不從心了,因為他能提供的功能是模擬鼠標和鍵盤的操作,但是打字嘛...特別是用拼音打出漢字,真就得輸入拼音然后加空格,通過輸入法打出來,而這個辦法實際上不是很穩定。
那么什么辦法實現漢字的輸入呢?那自然是我們最熟悉的Ctrl+C、Ctrl+V了。
而Python還有個庫(pyperclip)就提供了Windows剪貼板的功能,可以將字符串復制進剪貼板,然后就可以調用這個自動化庫pyautogui里面的熱鍵方法來觸發Ctrl+V,將復制到的文字粘貼到目標位置。
至此,代碼上的准備工作已經結束,保存后創建一個快捷方式,設置為Ctrl+數字鍵盤上的減號鍵。
然后將淘寶來的這個大按鈕接到電腦上,設置這個按鈕觸發上述的快捷鍵,到此就大功告成了。
后記:今天是完成之后的第一次使用,使用很穩定,孩子很喜歡,下次還來。