女朋友給你發微信,你能秒回嗎?,尤其是在你敲代碼敲到激情之時(emmmm,或者說殺的正爽時?),當然是 ———— 可以秒回的? ,才不屑于用圖靈機器人什么的,我們程序員?自有辦法,當然是python可以實現。
網上看了看,發現一個很有意思的庫itchat
大致看了一下介紹,發現十分有用
它既可以接收你的message指令,還可以用itchat.send(**, 'filehelper')發送你需要的內容了,我們可以將輸入的命令讓電腦執行,并接收命令返回的內容?,這不就解決問題了這簡直就是一個寶庫,我們可以實現很多有趣的功能?
實現控制電腦的cmd命令
os.popen(command)
command是你可以指定輸入的指令
一般我們這樣用
import os
command = 'help'
output = os.popen(command)
info = output.readlines()
a=[]
for line in info:a.append(line.strip('/r'))
b=''.join(a)
print(b)
command指令可以自己改,當然你也可以在for循環里面直接輸出line,不過會一行一行輸出,不利于微信后端的獲取和系統執行的效率,所以我們變成str類型,運行結果和在cmd的結果肯定是一樣的,但是是以文字方式顯示出來?
用這個能干什么呢,簡單點,我們可以用來實現電腦的定時關機或者重啟,舉個栗子:1小時后自動關機,輸入shutdown -s -t 3600,其中-s是關機,-t是定時,3600是3600秒。 shutdown -r 是重啟,往深了說,查看網絡連接,端口協議等,也是輕而易舉的(手動滑稽)
實時屏幕
這里用到了cv2庫,首先說一下安裝代碼:pip install opencv-python要切記切記不是pip install cv2 ,我這里是3.6.5,也可能跟版本有關,安裝是這樣按,但是導入的時候我們用的是import cv2
原理是利用了cv2的屏幕捕捉,得到了電腦的實時屏幕,類似于截圖的功能,說起來截圖也可以使用win32,就是使用Windows自帶的程序,但是一張圖片就4M左右,執行效率雖然說是比比cv2要高一點,但是作為用戶,其實不容易感受到差別,所以我選用了cv2,大致思路如下,詳細代碼在最后放出
import cv2
cap = cv2.VideoCapture(0)
ret, img = cap.read()
cv2.imwrite(filepath,img)
cap.release()
查看文件和傳輸文件
查看文件用cmd的dir命令就可以查看,但是稍微復雜了一點,有些不懂命令的就不能直接使用了,所以把兩個放出來寫了,另外發送文件用itchat.send_file(filepath,'filehelper')這里有個小建議,先把文件后綴名顯示出來再用這個程序?
先說查看文件
def list_folders_files(path):list_folders = []list_files = []for file in os.listdir(path):file_path = os.path.join(path, file)if os.path.isdir(file_path):list_folders.append(file)else:list_files.append(file)return (list_folders, list_files)
使用這個函數就可以得到指定路徑(path)下的所有文件夾和文件了
再說一下傳輸文件
newpath = path.encode("utf-8").decode("utf-8")
itchat.send_file(newpath,'filehelper')
為什么要寫第一句話呢?因為編碼問題(令人特別特別頭大的問題,在我另一個項目字頻統計中也遇到了,但未解決??)感興趣的可以在這查看Unicode之痛,簡單的來說就是中文文字變成計算機可以識別的文字需要的步驟,但是這樣還不行??,發送普通的英文文件是可以的,只要路徑中有中文就不行,試了很久不行之后我看了看官方文檔,發現了中文文件無法上傳的辦法
中文文件名文件上傳
Q: 為什么中文的文件沒有辦法上傳?
A: 這是由于requests的編碼問題導致的。若需要支持中文文件傳輸,fields.py (py3版本見這里)文件放入requests包的packages/urllib3下即可
提供鏈接
python2
python3
有的可能沒有這個路徑,建議用everything搜索一下fields.py這個文件然后再進行操作,注意:這一步如果未完成的話,程序中的傳輸文件可能會出問題
讓你的電腦說話
這個可以搞惡作劇,非常有意思,假設你室友玩你電腦,電腦突然罵了他一句,這個就很有意思了??
在這里我用了win32,也就是Windows自帶的程序
這個程序較為簡單,給出代碼
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
m='asfwagawgawg'
speak.Speak(m)
雖然聲音有點怪怪的,但是起到效果了,可以試試讓他說666,他會給你一個耿直的回復:六百六十六??
聊天
我居然忘了最關鍵的自動回復…
這個和之前的內容是分開的,之前的都屬于filehelper的內容,現在是屬于聊天內容,但這個我并沒有做很多,朋友們可以自行添加啊,可以使用random.choice隨機回復,她肯定察覺不出來?,或者可以更高級,做一個類似于人工智能的,識別的她的語句,然后回復相應的信息,這一點csdn的大佬很多,我這小白還不太會?,所以就沒有那么深入去做這個
完整代碼?
import itchat
import os
import time
import cv2
from PIL import ImageGrab
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")sendMsg = u"你好啊" #可以自己多寫幾條,隨機發送
usageMsg = u"使用方法:(切記以下所有命令中路徑注意一定要用 / 而不用 \ ,其中冒號必須為英文狀態下的 :)\n"\u"1.運行CMD命令:cmd xxx (xxx為命令)\n" \u"-例子:1小時后自動關機,輸入shutdown -s -t 3600,其中-s是關機,-t是定時,3600是3600秒。 shutdown -r 是重啟\n" \u"2.獲取當前電腦用戶:cap\n" \u"3.獲取桌面:screen\n" \u"4.獲取某個文件夾中的內容:folder + 路徑 例如C:/Users/***/Desktop 常用路徑\n" \u"5.傳輸文件:file+路徑 例如 file D:/*** \n" \u"6.讓電腦說話:voice + 內容\n" \u"7.啟用消息助手(默認關閉):ast\n" \u"8.關閉消息助手:astc"
flag = 0 #消息助手開關
nowTime = time.localtime()
s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)
filename = s +'.txt'
myfile = open('C:\\Users\\***\\Desktop\\wechat\\chat_record\\'+filename, 'w')def list_folders_files(path):"""返回 "文件夾" 和 "文件" 名字:param path: "文件夾"和"文件"所在的路徑:return: (list_folders, list_files):list_folders: 文件夾:list_files: 文件"""list_folders = []list_files = []for file in os.listdir(path):file_path = os.path.join(path, file)if os.path.isdir(file_path):list_folders.append(file)else:list_files.append(file)return (list_folders, list_files)@itchat.msg_register('Text')
def text_reply(msg):global flagmessage = msg['Text']fromName = msg['FromUserName']toName = msg['ToUserName']s=str(nowTime.tm_year)+'_'+str(nowTime.tm_mon)+'_'+str(nowTime.tm_mday)+ '_'+str(nowTime.tm_hour)+'_'+str(nowTime.tm_min)if toName == "filehelper":if message == "cap":cap = cv2.VideoCapture(0)time.sleep(0.5)ret, img = cap.read()temp=s+'.jpg'cv2.imwrite('C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, img)itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\photo\\'+temp, 'filehelper')cap.release()if message[0:5] == "voice":m = message.strip(message[0:6])speak.Speak(m)if message[0:6]== "folder":path = message.strip(message[0:7])temp=[](list_folders, list_files) = list_folders_files(path) itchat.send('此路徑下的文件夾有:', 'filehelper')itchat.send('\n'.join(str(i) for i in list_folders), 'filehelper') itchat.send('此路徑下的文件有(包括其路徑 方便復制):','filehelper')for fileName in list_files:if(path[-1]=='/'):filePath = path + fileNameelse:filePath = path + '/' + fileNamestring=(fileName+ ' ' + filePath)temp.append(string)itchat.send('\n'.join(str(i) for i in temp),'filehelper')if message[0:4] == "file":path = message.strip(message[0:5]) newpath = path.encode("utf-8").decode("utf-8")itchat.send_file(newpath,'filehelper')if message[0:3] == "cmd":command = message.strip(message[0:4])output = os.popen(command)info = output.readlines()a=[]for line in info:a.append(line.strip('\r'))b=''.join(a)itchat.send(b, 'filehelper') if message == "screen":a=ImageGrab.grab()screen=s+'.jpg'a.save(r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen)itchat.send('@img@%s'%r'C:\\Users\\***\\Desktop\\wechat\\screen\\'+screen, 'filehelper')if message == "ast":flag = 1itchat.send("消息助手已開啟", "filehelper")if message == "astc":flag = 0itchat.send("消息助手已關閉", "filehelper")elif flag == 1:itchat.send(sendMsg, fromName)myfile.write(message)myfile.write("\n")myfile.flush()if __name__ == '__main__':itchat.auto_login()itchat.send(usageMsg, "filehelper")itchat.run()
注意:標注 ** 的是用戶名,你也可以使用別的的路徑
使用截圖
這個cap我調整了好多次才沒拍到我丑陋的宿舍
電腦屏幕的截圖(快夸好看?):
我的一個智障室友
在本地保存的聊天文件:
我是根據時間命名的聊天記錄,每開一次就會新增一個
之前查看的文件夾:
那就這樣吧,而且我感覺我女朋友會打我,不慫!
總結
以上是生活随笔為你收集整理的微信实现秒回以及控制电脑的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。