【玩具】使用Python自動化傳送微信訊息進行訂水

真正的大英雄發表於2021-12-02

事情是這樣的,我知道淘寶上有賣一種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+數字鍵盤上的減號鍵。

然後將淘寶來的這個大按鈕接到電腦上,設定這個按鈕觸發上述的快捷鍵,到此就大功告成了。

 

後記:今天是完成之後的第一次使用,使用很穩定,孩子很喜歡,下次還來。

相關文章