给出微信联系人、微信启动路径、消息内容,实现自动登录并并发送消息,如果需要定时发送可以开一个线程或者用while True实现。上代码,报错的话可能是缺少对应的库,自行百度安装即可。
下面代码 复制后保存为WX.py文件
import time#时间
from threading import Timer#定时循环
import win32gui# 窗口操作
import win32con# 窗口操作
import win32api# 窗口操作
from pymouse import PyMouse#鼠标操作
import os#打开程序
import pyautogui#键盘操作
import pyperclip#剪切板操作
class WXfs:
def __init__(self,str_name,lujing,):
self.str_name=str_name
self.lujing=lujing
self.hlda = 0
self.hldb = 0
self.hldc = 0
self.width=win32api.GetSystemMetrics(0)#屏幕宽度
self.height = win32api.GetSystemMetrics(1)#屏幕高度
def zuobiao(self,hwnd):# 获取当前窗口的【、上、右下】方向的坐标位置
y=left, top, right, bottom = win32gui.GetWindowRect(hwnd)
return y
def WXdl_xy(self):#登录并打开对话框
#global hldc,hldb
pt=PyMouse()#鼠标对象ChatWnd
x=os.startfile(self.lujing)#打开微信程序
time.sleep(1)
self.hlda = win32gui.FindWindow(u"WeChatLoginWndForPC",'微信')#查找登录界面窗口句柄
self.hldb = win32gui.FindWindow(u"WeChatMainWndForPC",'微信')#查找微信窗口句柄
self.hldc = win32gui.FindWindow(u"ChatWnd",self.str_name)#查找单独聊天句柄
if not self.hlda and not self.hldb:#微信程序未打开
for i in range(10):
self.hlda = win32gui.FindWindow(u"WeChatLoginWndForPC",'微信')#查找窗口句柄
if self.hlda:#已打开登录界面跳出循环
break
else:
time.sleep(2)#等待登录界面开启
#print(hlda,hldb,hldc)
if self.hldc:#一对一聊天对话框已打开 跳出程序
return self.hldc
if self.hlda and not self.hldb:#处于待登录界面 尝试点击登录按钮
time.sleep(2)#让程序飞一会 等待微信响应
xyz=self.zuobiao(self.hlda)#获取登录界面坐标
#计算登录按钮中心点坐标
zb=int((xyz[2]-xyz[0])/2+xyz[0]),int((xyz[3]-xyz[1])*0.756+xyz[1])
win32gui.ShowWindow(self.hlda, win32con.SW_SHOWDEFAULT)#唤醒窗口
win32gui.SetForegroundWindow(self.hlda)#置顶窗口
pt.click(zb[0], zb[1])#鼠标左键单击登录按钮
#print("登录界面句柄:%s、登录坐标%s,%s"%(hlda,zb[0],zb[1])) #
for i in range(60):#等待微信登录成功
self.hldb = win32gui.FindWindow(u"WeChatMainWndForPC",'微信')
#print(i,hld)
if self.hldb:#已打开登录界面跳出循环
break
else:
time.sleep(2)#等待登录界面开启
time.sleep(10)#等待登录界面开启
if self.hldb and not self.hldc:#微信已登录 一对一聊天未打开
#hw1=self.CK_size()#获取屏幕尺寸
ZB=self.zuobiao(self.hldb)#获取登录后窗体坐标
pyperclip.copy(self.str_name) # 一对一聊天对象 写入到剪切板
win32gui.ShowWindow(self.hldb, win32con.SW_SHOWNORMAL)#唤醒窗口
win32gui.SetForegroundWindow(self.hldb)#置顶窗口
time.sleep(0.5)
pyautogui.hotkey('ctrl','f') #查找聊天对象
time.sleep(0.5)
pyautogui.keyDown('backspace')#按下键盘
time.sleep(1)
pyautogui.keyUp('backspace')#释放按键
time.sleep(0.1)
pyautogui.hotkey('ctrl','v') #粘贴文本
time.sleep(0.5)
pyautogui.keyDown('enter')#按下键盘
time.sleep(0.1)
pyautogui.keyUp('enter')#释放按键
time.sleep(0.5)
X1=ZB[0]+int((self.height/1080)*129)#X1=ZB[0]+347
Y1=ZB[1]+int((self.height/1080)*100)#Y1=ZB[1]+239
win32gui.ShowWindow(self.hldb, win32con.SW_SHOWNORMAL)#唤醒窗口
win32gui.SetForegroundWindow(self.hldb)#置顶窗口
#pt.move(X1, Y1)#移动鼠标
time.sleep(0.5)#等待
#win32gui.ShowWindow(hldb, win32con.SW_SHOWNORMAL)#唤醒窗口
pt.click(X1, Y1)#鼠标左键单击
time.sleep(0.01)
pt.click(X1, Y1)#鼠标左键单击
#print("双击位置%s、%s"%(X1,Y1))
for i in range(30):#等待微信登录成功
self.hldc = win32gui.FindWindow(u"ChatWnd",self.str_name)#查找单独聊天句柄
#print(i,hld)
if self.hldc:#已打开登录界面跳出循环
#print("打开成功:",hldc)
#最小化SW_FORCEMINIMIZE 隐藏SW_HIDE
#windll.user32.ShowWindow(hwnd, win32con.SW_FORCEMINIMIZE)
win32gui.CloseWindow(self.hldb)#关闭微信主界面
return self.hldc
else:
time.sleep(0.5)#等待登录界面开启
if self.hldc:#已打开一对一聊天
#print("打开成功:",hldc)
return self.hldc
else:
#print("操作失败")
return 0
def send_wx_str(self,messg):#str_name,messg=None
#str_name="皮皮虾"
#timea = time.strftime('%H:%M:%S')#12:45:23 时分秒
#messg=namesList
if not self.hldc:#发送对象 未开启 一对一聊天
for i in range(5):
self.hldc = win32gui.FindWindow(u"ChatWnd",self.str_name)#查找单独聊天句柄
if self.hldc:#已打开一对一聊天 退出循环
break
else:
self.WXdl_xy() #尝试打开一对一聊天
if i==4:
return 0#打开失败 退出函数
else:
time.sleep(5)
pyperclip.copy(messg) # 字符串如写入到剪切板
win32gui.ShowWindow(self.hldc, win32con.SW_SHOWNORMAL)#唤醒窗口
win32gui.SetForegroundWindow(self.hldc)#置顶窗口
time.sleep(0.2)#等待
pyautogui.hotkey('ctrl','v') #粘贴文本
time.sleep(0.2)
pyperclip.paste()#粘贴
time.sleep(0.05)
pyautogui.keyDown('enter')#按下键盘
time.sleep(0.05)
pyautogui.keyUp('enter')#释放按键
#隐藏窗口 最小化SW_FORCEMINIMIZE 隐藏SW_HIDE
win32gui.ShowWindow(self.hldc, win32con.SW_FORCEMINIMIZE)
下面是调用库的简易程序,供参考
from WX import WXfs#调用上面的库 需要放置在相同目录下
if __name__ == "__main__":
str_name="文件传输助手"
messg = "测试,测试"
lujing=r'C:\Program Files (x86)\Tencent\WeChat\WeChat.exe'
send=WXfs(str_name,lujing)#微信发送对象,微信启动路径
send.send_wx_str("nihao ")