基于python,控制微信自动登录并发送消息给指定联系人

给出微信联系人、微信启动路径、消息内容,实现自动登录并并发送消息,如果需要定时发送可以开一个线程或者用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 ")
 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值