Python實(shí)現(xiàn)微信自動(dòng)回復(fù)信息的功能(根據(jù)不同信息回復(fù)對(duì)應(yīng)的信息)
一.效果展示
二.前言介紹
我們使用的第三方包是:UIAutomation
UIAutomation的簡(jiǎn)介:UIAutomation 是一種自動(dòng)化測(cè)試框架,它可以模擬用戶在應(yīng)用程序圖形用戶界面上的操作,并提供對(duì)應(yīng)用程序界面的元素的完整訪問(wèn)。該框架最初由 Microsoft 開(kāi)發(fā),旨在為 Microsoft Windows 平臺(tái)上的應(yīng)用程序自動(dòng)化測(cè)試提供一種標(biāo)準(zhǔn)化的方法。UIAutomation 框架允許測(cè)試人員編寫(xiě)自動(dòng)化測(cè)試腳本,以便在應(yīng)用程序的不同版本和環(huán)境中對(duì)其進(jìn)行可靠的測(cè)試。這種自動(dòng)化測(cè)試方法可以提高測(cè)試的速度和準(zhǔn)確性,并減少了人工測(cè)試的負(fù)擔(dān)。
總之UIAutomation的功能還是非常強(qiáng)大的,我們這次拿他來(lái)小試牛刀
三.進(jìn)入正題
1.需要用到的包
我們要實(shí)現(xiàn)對(duì)收到的信息進(jìn)行分析判斷,我們首先需要將文本內(nèi)容存儲(chǔ)到本地,我們這次使用的是:csv文件,就是Excel文件,所以我們要解析對(duì)應(yīng)的文件,就需要安裝對(duì)應(yīng)的包。
安裝UIAutomation包
pip install uiautomation
安裝pandas包,用來(lái)讀取csv數(shù)據(jù)
pip install pandas
安裝numpy包,目的是將讀取的數(shù)據(jù)轉(zhuǎn)換為列表
pip install numpy
2.下面進(jìn)入到代碼的部分
2.1導(dǎo)入所需要用到的包
import numpy as np # 引入numpy庫(kù),目的是將讀取的數(shù)據(jù)轉(zhuǎn)換為列表 import pandas as pd # 引入pandas庫(kù),用來(lái)讀取csv數(shù)據(jù) from uiautomation import WindowControl # 引入uiautomation庫(kù)中的WindowControl類,用來(lái)進(jìn)行圖像識(shí)別和模擬操作
2.2定義微信窗口控件
wx = WindowControl( Name='微信', # searchDepth=1 )
這里我們定義了一個(gè)窗口控件WX,它表示的是微信應(yīng)用的主窗口。通過(guò) WindowControl 類的構(gòu)造函數(shù),傳遞給它窗口的名稱 Name=‘微信’,它會(huì)在屏幕上查找并綁定微信應(yīng)用的主窗口。也可以使用 searchDepth
參數(shù)來(lái)設(shè)置搜索窗口控件的深度。
2.3調(diào)用尋找微信控件的方法
wx.ListControl() wx.SwitchToThisWindow()
這里使用了wx.ListControl()函數(shù),它的作用是尋找窗口控件中的會(huì)話列表。然后調(diào)用wx.SwitchToThisWindow()函數(shù),將微信應(yīng)用切換到當(dāng)前窗口,也就是將微信界面顯示到最上層。
2.3綁定窗口的會(huì)話列表控件并讀取數(shù)據(jù)
hw = wx.ListControl(Name='會(huì)話') df = pd.read_csv('回復(fù)數(shù)據(jù).csv', encoding='GBK')
這里獲取綁定窗口的會(huì)話列表控件,并將其賦值給 hw
,在后續(xù)代碼中使用。然后使用 pandas 庫(kù)中的 read_csv()
函數(shù)讀取名為“回復(fù)數(shù)據(jù).csv”的 csv 文件,并設(shè)置編碼格式為 GBK,將讀取到的數(shù)據(jù)存儲(chǔ)在 pandas 的 DataFrame 對(duì)象 df
中。
可以看到此時(shí)的數(shù)據(jù)就是一個(gè)列表,就跟excel表格一樣
在編譯器中看到的文件中的數(shù)據(jù)是這樣的:
2.4使用while True:死循環(huán)監(jiān)聽(tīng)信息
while True: # 獲取未讀消息控件we we = hw.TextControl(searchDepth=4) # 死循環(huán)直到獲取未讀消息 while not we.Exists(): pass
這里使用了 while循環(huán),一直監(jiān)聽(tīng)微信群或私聊中的消息。當(dāng)有新消息出現(xiàn)時(shí),獲取未讀消息控件,并使用 while循環(huán)等待,直到獲取到未讀消息為止。serchDepth=4是表示我們只監(jiān)聽(tīng)最上面的四個(gè)好友或群聊
2.5獲取最新的信息
last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name
在上面的 while 循環(huán)中,如果有新消息,就會(huì)執(zhí)行這行代碼,通過(guò) wx.ListControl()
函數(shù)獲取最新一條消息的窗口控件,將其名字存儲(chǔ)到 last_msg
變量中。注意我們這里只會(huì)設(shè)置了只會(huì)獲取到最后一次信息,如果想修改只要修改下標(biāo)即可
2.6進(jìn)入循環(huán)做的一些操作
# 存在未讀消息 if we.Name: # 點(diǎn)擊未讀消息 we.Click(simulateMove=False) # 讀取最后一條消息 last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name # 判斷關(guān)鍵字 msg = df.apply(lambda x: x['回復(fù)內(nèi)容'] if x['關(guān)鍵詞'] in last_msg else None, axis=1) print(msg) # 數(shù)據(jù)篩選,移除空數(shù)據(jù) msg.dropna(axis=0, how='any', inplace=True) # 做成列表 ar = np.array(msg).tolist()
上面的代碼首先是使用wc.Click()點(diǎn)擊事件,點(diǎn)擊到未讀信息的用戶對(duì)話框中,使用 apply()
函數(shù)從讀取到的 csv 文件中查找是否包含 last_msg
中的關(guān)鍵詞。該函數(shù)使用了給定的 lambda 函數(shù),對(duì) df
DataFrame 表格中的每一行進(jìn)行遍歷,并返回符合條件的行,然后篩選出數(shù)據(jù),使用 dropna()
函數(shù)刪除無(wú)效數(shù)據(jù)(即值為 None 的行),利用 np.array()
函數(shù)將 DataFrame 對(duì)象轉(zhuǎn)換為 numpy 數(shù)組,再使用 tolist()
函數(shù)將其轉(zhuǎn)換為 Python 列表。將處理后的列表存儲(chǔ)在名為 ar
的變量中。
2.7回復(fù)信息
# 能夠匹配到數(shù)據(jù)時(shí) if ar: # 將數(shù)據(jù)輸入 # 替換換行符號(hào) wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=1) # 發(fā)送消息 回車鍵 wx.SendKeys('{Enter}', waitTime=0) # 通過(guò)消息匹配檢索會(huì)話欄的聯(lián)系人 wx.TextControl(SubName=ar[0][:5]).RightClick() # 沒(méi)有匹配到數(shù)據(jù)時(shí) else: wx.SendKeys('我不理解你什么意思', waitTime=1) wx.SendKeys('{Enter}', waitTime=0) wx.TextControl(SubName=last_msg[:5]).RightClick(10)
上面就是回復(fù)信息了,wx.SendKeys(‘{Shift}{Enter}’)就是將ar列表中的數(shù)據(jù)輸入到對(duì)話框中,waitTime是設(shè)置它的等待時(shí)間,wx.SendKeys'{Enter}'就是響應(yīng)回車鍵,將信息發(fā)送出去,waitTime也是等待時(shí)間,wx.TextControl(SubName=ar[0][:5]).RightClick()的作用就是通過(guò)消息匹配檢索會(huì)話欄的聯(lián)系人,也就是實(shí)現(xiàn)一個(gè)鼠標(biāo)右擊功能:
wx.TextControl()
函數(shù)用于查找微信窗口中的文本框控件;SubName
參數(shù)用于指定控件的子名稱,即控件的標(biāo)簽名稱;ar[0][:5]
是一個(gè)字符串,它是通過(guò)某種方式獲取的,用于指定要右鍵單擊的文本在文本框中的位置;RightClick()
方法模擬鼠標(biāo)右鍵單擊事件,即在指定的文本位置上單擊鼠標(biāo)右鍵。
四:完整代碼
#!/usr/bin/python3 # -*- coding: utf-8 -*- import numpy as np # 引入numpy庫(kù),目的是將讀取的數(shù)據(jù)轉(zhuǎn)換為列表 import pandas as pd # 引入pandas庫(kù),用來(lái)讀取csv數(shù)據(jù) from uiautomation import WindowControl # 引入uiautomation庫(kù)中的WindowControl類,用來(lái)進(jìn)行圖像識(shí)別和模擬操作 # 綁定微信主窗口 wx = WindowControl( Name='微信', searchDepth=1 ) # 切換窗口 wx.ListControl() wx.SwitchToThisWindow() # 尋找會(huì)話控件綁定 hw = wx.ListControl(Name='會(huì)話') # 通過(guò)pd讀取數(shù)據(jù) df = pd.read_csv('回復(fù)數(shù)據(jù).csv', encoding='GBK') print(df) # 死循環(huán)接收消息 while True: # 從查找未讀消息 we = hw.TextControl(searchDepth=4) # 死循環(huán)維持,沒(méi)有超時(shí)報(bào)錯(cuò) while not we.Exists(): pass # 存在未讀消息 if we.Name: # 點(diǎn)擊未讀消息 we.Click(simulateMove=False) # 讀取最后一條消息 last_msg = wx.ListControl(Name='消息').GetChildren()[-1].Name # 判斷關(guān)鍵字 msg = df.apply(lambda x: x['回復(fù)內(nèi)容'] if x['關(guān)鍵詞'] in last_msg else None, axis=1) print(msg) # 數(shù)據(jù)篩選,移除空數(shù)據(jù) msg.dropna(axis=0, how='any', inplace=True) # 做成列表 ar = np.array(msg).tolist() # 能夠匹配到數(shù)據(jù)時(shí) if ar: # 將數(shù)據(jù)輸入 # 替換換行符號(hào) wx.SendKeys(ar[0].replace('{br}', '{Shift}{Enter}'), waitTime=1) # 發(fā)送消息 回車鍵 wx.SendKeys('{Enter}', waitTime=1) # 通過(guò)消息匹配檢索會(huì)話欄的聯(lián)系人 wx.TextControl(SubName=ar[0][:5]).RightClick() # 沒(méi)有匹配到數(shù)據(jù)時(shí) else: wx.SendKeys('我不理解你什么意思', waitTime=1) wx.SendKeys('{Enter}', waitTime=1) wx.TextControl(SubName=last_msg[:5]).RightClick()
到此這篇關(guān)于Python實(shí)現(xiàn)微信自動(dòng)回復(fù)信息的功能(根據(jù)不同信息回復(fù)對(duì)應(yīng)的信息)的文章就介紹到這了,更多相關(guān)python微信自動(dòng)回復(fù)信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
10個(gè)Python辦公自動(dòng)化案例總結(jié)
Python作為一種簡(jiǎn)單而強(qiáng)大的編程語(yǔ)言,不僅在數(shù)據(jù)科學(xué)和軟件開(kāi)發(fā)領(lǐng)域廣受歡迎,還在辦公自動(dòng)化方面發(fā)揮了巨大作用,通過(guò)Python,我們可以編寫(xiě)腳本來(lái)自動(dòng)執(zhí)行各種重復(fù)性任務(wù),從而提高工作效率并減少錯(cuò)誤,在本文中,我們總結(jié)了10個(gè)Python辦公自動(dòng)化案例2024-09-09Python爬取網(wǎng)易云歌曲評(píng)論實(shí)現(xiàn)詞云圖
這篇文章主要為大家介紹了Python爬取網(wǎng)易云歌曲評(píng)論實(shí)現(xiàn)詞云分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06詳解python的webrtc庫(kù)實(shí)現(xiàn)語(yǔ)音端點(diǎn)檢測(cè)
這篇文章主要介紹了詳解python的webrtc庫(kù)實(shí)現(xiàn)語(yǔ)音端點(diǎn)檢測(cè),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05基于Python實(shí)現(xiàn)語(yǔ)音合成小工具
TTS(Text To Speech)是一種語(yǔ)音合成技術(shù),可以讓機(jī)器將輸入文本以語(yǔ)音的方式播放出來(lái),實(shí)現(xiàn)機(jī)器說(shuō)話的效果。本文將使用pyttsx3庫(kù)作為示范,編寫(xiě)一個(gè)語(yǔ)音合成小工具,感興趣的可以了解一下2022-12-12Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法
今天小編就為大家分享一篇Python 普通最小二乘法(OLS)進(jìn)行多項(xiàng)式擬合的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python使用matplotlib簡(jiǎn)單繪圖示例
這篇文章主要介紹了Python使用matplotlib簡(jiǎn)單繪圖,結(jié)合實(shí)例形式分析了Python基于matplotlib繪制正弦與余弦曲線相關(guān)操作技巧,需要的朋友可以參考下2018-02-02