python 微信自动回复机器人

  1. 导入wxauto https://github.com/cluic/wxauto

    #!python3
    # -*- coding: utf-8 -*-
    """
    Author: tikic@qq.com
    Source: https://github.com/cluic/wxauto
    License: MIT License
    Version: 3.3.5.3
    """
    from tokenize import Name
    from unicodedata import name
    import uiautomation as uia
    import win32gui, win32con
    import win32clipboard as wc
    import time
    import osAUTHOR_EMAIL = 'tikic@qq.com'
    UPDATE = '2021-09-06'
    VERSION = '3.3.5.3'COPYDICT = {}class WxParam:SYS_TEXT_HEIGHT = 33TIME_TEXT_HEIGHT = 34RECALL_TEXT_HEIGHT = 45CHAT_TEXT_HEIGHT = 52CHAT_IMG_HEIGHT = 117SpecialTypes = ['[文件]', '[图片]', '[视频]', '[音乐]', '[链接]']class WxUtils:def SplitMessage(MsgItem):uia.SetGlobalSearchTimeout(0)MsgItemName = MsgItem.Nameif MsgItem.BoundingRectangle.height() == WxParam.SYS_TEXT_HEIGHT:Msg = { 'name':'SYS', 'msg':MsgItemName, 'time':''.join([str(i) for i in MsgItem.GetRuntimeId()])}elif MsgItem.BoundingRectangle.height() == WxParam.TIME_TEXT_HEIGHT:Msg = {'name':'Time', 'msg':MsgItemName, 'time':''.join([str(i) for i in MsgItem.GetRuntimeId()])}elif MsgItem.BoundingRectangle.height() == WxParam.RECALL_TEXT_HEIGHT:if '撤回' in MsgItemName:Msg = {'name':'Recall','msg': MsgItemName, 'time':''.join([str(i) for i in MsgItem.GetRuntimeId()])}else:Msg = {'name':'SYS', 'msg':MsgItemName,'time': ''.join([str(i) for i in MsgItem.GetRuntimeId()])}else:Index = 1User = MsgItem.ButtonControl(foundIndex=Index)try:while True:if User.Name == '':Index += 1User = MsgItem.ButtonControl(foundIndex=Index)else:breakMsg = {'name':User.Name, 'msg':MsgItemName, 'time':''.join([str(i) for i in MsgItem.GetRuntimeId()])}except:Msg = {'name':'SYS',  'msg':MsgItemName, 'time':''.join([str(i) for i in MsgItem.GetRuntimeId()])}uia.SetGlobalSearchTimeout(10.0)return Msgdef SetClipboard(data, dtype='text'):'''复制文本信息或图片到剪贴板data : 要复制的内容,str 或 Image 图像'''if dtype.upper() == 'TEXT':type_data = win32con.CF_UNICODETEXTelif dtype.upper() == 'IMAGE':from io import BytesIOtype_data = win32con.CF_DIBoutput = BytesIO()data.save(output, 'BMP')data = output.getvalue()[14:]else:raise ValueError('param (dtype) only "text" or "image" supported')wc.OpenClipboard()wc.EmptyClipboard()wc.SetClipboardData(type_data, data)wc.CloseClipboard()def Screenshot(hwnd, to_clipboard=True):'''为句柄为hwnd的窗口程序截图hwnd : 句柄to_clipboard : 是否复制到剪贴板'''import pyscreenshot as shotbbox = win32gui.GetWindowRect(hwnd)win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0,\win32con.SWP_SHOWWINDOW|win32con.SWP_NOMOVE|win32con.SWP_NOSIZE)win32gui.SetWindowPos(hwnd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0,\win32con.SWP_SHOWWINDOW|win32con.SWP_NOMOVE|win32con.SWP_NOSIZE)win32gui.BringWindowToTop(hwnd)im = shot.grab(bbox)if to_clipboard:WxUtils.SetClipboard(im, 'image')return imdef SavePic(savepath=None, filename=None):Pic = uia.WindowControl(ClassName='ImagePreviewWnd', Name='图片查看')Pic.SendKeys('{Ctrl}s')SaveAs = Pic.WindowControl(ClassName='#32770', Name='另存为...')SaveAsEdit = SaveAs.EditControl(ClassName='Edit', Name='文件名:')SaveButton = Pic.ButtonControl(ClassName='Button', Name='保存(S)')PicName, Ex = os.path.splitext(SaveAsEdit.GetValuePattern().Value)if not savepath:savepath = os.getcwd()if not filename:filename = PicNameFilePath = os.path.realpath(os.path.join(savepath, filename + Ex))SaveAsEdit.SendKeys(FilePath)SaveButton.Click()Pic.SendKeys('{Esc}')def ControlSize(control):locate = control.BoundingRectanglesize = (locate.width(), locate.height())return sizedef ClipboardFormats(unit=0, *units):units = list(units)wc.OpenClipboard()u = wc.EnumClipboardFormats(unit)wc.CloseClipboard()units.append(u)if u:units = WxUtils.ClipboardFormats(u, *units)return unitsdef CopyDict():Dict = {}for i in WxUtils.ClipboardFormats():if i == 0:continuewc.OpenClipboard()try:content = wc.GetClipboardData(i)wc.CloseClipboard()except:wc.CloseClipboard()raise ValueErrorif len(str(i))>=4:Dict[str(i)] = contentreturn Dictclass WeChat:def __init__(self):self.UiaAPI = uia.WindowControl(ClassName='WeChatMainWndForPC')self.SessionList = self.UiaAPI.ListControl(Name='会话')self.EditMsg = self.UiaAPI.EditControl(Name='输入')self.SearchBox = self.UiaAPI.EditControl(Name='搜索')self.MsgList = self.UiaAPI.ListControl(Name='消息')self.SessionItemList = []def GetWXName(self):self.WXName= self.UiaAPI.ButtonControl()return self.WXName.Namedef GetOfficialList(self):s= self.UiaAPI.TextControl(Name='公众号')print(s)def GetNewMsgSessionList(self):'''获取发送人会话列表'''SessionList= self.GetSessionList()NewMsgList=[]for name in SessionList:s =self.SessionList.ListItemControl(Name=name)for i in s.GetChildren():for j in i.GetChildren():if j.ControlType == 50020 and j.Name !='':NewMsgList.append(name)return NewMsgListdef GetSessionList(self, reset=False):'''获取当前会话列表,更新会话列表'''self.SessionItem = self.SessionList.ListItemControl()SessionList = []if reset:self.SessionItemList = []for i in range(100):try:name = self.SessionItem.Nameexcept:breakif name not in self.SessionItemList:self.SessionItemList.append(name)if name not in SessionList:SessionList.append(name)self.SessionItem = self.SessionItem.GetNextSiblingControl()return SessionListdef Search(self, keyword):'''查找微信好友或关键词keywords: 要查找的关键词,str   * 最好完整匹配,不完全匹配只会选取搜索框第一个'''self.UiaAPI.SetFocus()time.sleep(0.2)self.UiaAPI.SendKeys('{Ctrl}f', waitTime=1)self.SearchBox.SendKeys(keyword, waitTime=1.5)self.SearchBox.SendKeys('{Enter}')def ChatWith(self, who, RollTimes=None):'''打开某个聊天框who : 要打开的聊天框好友名,str;  * 最好完整匹配,不完全匹配只会选取搜索框第一个RollTimes : 默认向下滚动多少次,再进行搜索'''self.UiaAPI.SwitchToThisWindow()RollTimes = 10 if not RollTimes else RollTimesdef roll_to(who=who, RollTimes=RollTimes):for i in range(RollTimes):if who not in self.GetSessionList()[:-1]:self.SessionList.WheelDown(wheelTimes=3, waitTime=0.1*i)else:time.sleep(0.5)self.SessionList.ListItemControl(Name=who).Click(simulateMove=False)return 1return 0rollresult = roll_to()if rollresult:return 1else:self.Search(who)return roll_to(RollTimes=1)def SendMsg(self, msg, clear=True):'''向当前窗口发送消息msg : 要发送的消息clear : 是否清除当前已编辑内容'''self.UiaAPI.SwitchToThisWindow()if clear:self.EditMsg.SendKeys('{Ctrl}a', waitTime=0)self.EditMsg.SendKeys(msg, waitTime=0)self.EditMsg.SendKeys('{Enter}', waitTime=0)def SendFiles(self, *filepath, not_exists='ignore'):"""向当前聊天窗口发送文件not_exists: 如果未找到指定文件,继续或终止程序*filepath: 要复制文件的绝对路径"""global COPYDICTkey = ''for file in filepath:file = os.path.realpath(file)if not os.path.exists(file):if not_exists.upper() == 'IGNORE':print('File not exists:', file)continueelif not_exists.upper() == 'RAISE':raise FileExistsError('File Not Exists: %s'%file)else:raise ValueError('param not_exists only "ignore" or "raise" supported')key += '<EditElement type="3" filepath="%s" shortcut="" />'%fileif not key:return 0if not COPYDICT:self.EditMsg.SendKeys(' ', waitTime=0)self.EditMsg.SendKeys('{Ctrl}a', waitTime=0)self.EditMsg.SendKeys('{Ctrl}c', waitTime=0)self.EditMsg.SendKeys('{Delete}', waitTime=0)while True:try:COPYDICT = WxUtils.CopyDict()breakexcept:passwc.OpenClipboard()wc.EmptyClipboard()wc.SetClipboardData(13, '')wc.SetClipboardData(16, b'\x04\x08\x00\x00')wc.SetClipboardData(1, b'')wc.SetClipboardData(7, b'')for i in COPYDICT:copydata = COPYDICT[i].replace(b'<EditElement type="0"><![CDATA[ ]]>', key.encode()).replace(b'type="0"', b'type="3"')wc.SetClipboardData(int(i), copydata)wc.CloseClipboard()self.SendClipboard()return 1def SendClipboard(self):'''向当前聊天页面发送剪贴板复制的内容'''self.SendMsg('{Ctrl}v')@propertydef GetAllMessage(self):'''获取当前窗口中加载的所有聊天记录'''MsgDocker = []MsgItems = self.MsgList.GetChildren()for MsgItem in MsgItems:MsgDocker.append(WxUtils.SplitMessage(MsgItem))return MsgDocker@propertydef GetLastMessage(self):'''获取当前窗口中最后一条聊天记录'''uia.SetGlobalSearchTimeout(1.0)MsgItem = self.MsgList.GetChildren()[1]Msg = WxUtils.SplitMessage(MsgItem)uia.SetGlobalSearchTimeout(10.0)return Msgdef LoadMoreMessage(self, n=0.1):'''定位到当前聊天页面,并往上滚动鼠标滚轮,加载更多聊天记录到内存'''n = 0.1 if n<0.1 else 1 if n>1 else nself.MsgList.WheelUp(wheelTimes=int(500*n), waitTime=0.1)def SendScreenshot(self, name=None, classname=None):'''发送某个桌面程序的截图,如:微信、记事本...name : 要发送的桌面程序名字,如:微信classname : 要发送的桌面程序类别名,一般配合 spy 小工具使用,以获取类名,如:微信的类名为 WeChatMainWndForPC'''if name and classname:return 0else:hwnd = win32gui.FindWindow(classname, name)if hwnd:WxUtils.Screenshot(hwnd)self.SendClipboard()return 1else:return 0
  2. 获取窗口微信聊天窗口发送消息
    import json
    from win32gui import *
    import win32gui
    import  random
    import win32con
    from wxauto import *
    wx = WeChat()
    chat=None
    while True:if chat is not None:wx.ChatWith(chat)msg = wx.GetLastMessageif msg["name"] == chat:wx.SendMsg('机器人测试')list =wx.GetNewMsgSessionList()for user in list:wx.ChatWith(user)wx.SendMsg('机器人测试')chat=usertime.sleep(10)time.sleep(10)
  3. 使用UISpy.exe 查找窗口类
    https://download.csdn.net/download/sinat_31062885/85282437

python 微信自动回复机器人相关推荐

  1. python 微信自动回复机器人_python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)...

    前言首先你的微信号能够登录网页版微信,才能打造你的专属个人微信号机器人,点击跳转网页版微信登录页面 类似的文章网上也都有,其实我也是受到别的文章的一些启发,因为不是每个人都想实现同样的功能的,直接套用 ...

  2. Python微信自动回复机器人

    import requests import itchat # 这是一个用于微信回复的库KEY = '' #这是我的机器人,你也可以利用图灵机器人获取自己的key# 向api发送请求 def get_ ...

  3. python 贴吧自动回复机-Python实现微信自动回复机器人详细教程

    首先,我们需要安装并配置好Python环境,并安装requests和itchat包,我用的是Windows7环境! https://www.python.org/ python官网 下载 然后直接打开 ...

  4. python 贴吧自动回复机-python_库学习_02_微信自动回复机器人

    一.python发展的趋势日益庞大,微信也有对应的库itchat.这次的实例做做成可在任意电脑运行的微信自动回复机器人exe.文件. 二.完成这个小应用我们需要装一些库,, itchat:这个东东不出 ...

  5. python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器)

    python实现微信自动回复机器人+查看别人撤回的消息(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python实现微信自动回复机器人+查看别 ...

  6. python发音机器人_微信自动回复机器人(PHP与python)

    微信自动回复机器人很受欢迎,可以通过简单的代码编写就可以省去大部分的人工回复时间.接下来贤集网小编要与大家分享的的是微信机器人自动回复消息如何通过PHP与python语言实现. 用python实现微信 ...

  7. Python开发:微信自动回复机器人是怎么做的 ?

    简单粗暴,分享一种有趣的玩法---微信自动回复机器人. 程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器人小笼包跟自己微信好友聊天的截图. 二.程序介绍 欢迎加入pyt ...

  8. python 贴吧自动回复机-python实现微信自动回复机器人功能

    一 简单介绍 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展.实现了微信登录.收发消息.搜索好友.数据统计等功能. 安装:wxpy ...

  9. python微信机器人_30行代码实现微信自动回复机器人

    30行代码实现微信自动回复机器人 一.写在前面 今天下午又学到了itchat另一种有趣的玩法---微信自动回复机器人. 程序很简单仅仅三十行代码左右,实现了机器人自动与你的微信好友聊天,下面是我的机器 ...

  10. 如何用 30 行代码实现微信自动回复机器人?

    作者 | Ahab 责编 | 胡巍巍 写在前面 很多朋友对itchat非常感兴趣,近日又学到了itchat另一种有趣的玩法--微信自动回复机器人. 程序很简单仅仅三十行代码左右,实现了机器人自动与你的 ...

最新文章

  1. 《黑马程序员》认识OC的第一个程序(Objective-c)
  2. Kettle使用_25 改变文件编码压缩与邮件
  3. php 获取网卡mac
  4. URAL1815 Farm in San Andreas(费马点,圆圆相交)
  5. 谷粒商城:18.性能压测
  6. android 自定义pickerview,Simple PickerView for Android - 这是一个高仿 IOS PickerView 控件的库...
  7. java 万年历 农历_万年历(java实现)
  8. 测试显卡cpu中文软件,显卡信息检测工具(GPUinfo)
  9. 关于微博营销推广案例
  10. ns注册改服务器,NameSilo域名更改NS服务器简单过程介绍
  11. 简化电脑操作,不让多余操作浪费你的生命
  12. php 图片大小更改,word图片怎么统一调整大小
  13. 如何做好自动化运维?自动化运维必备技能有哪些?
  14. 一度智信|想要提高店铺流量,商家需要了解这些引流渠道
  15. 妙用Java 8中的 Function接口,消灭if...else(非常新颖的写法)
  16. 神仙爱情!年轻富翁捐5亿科研经费,让女友不用申请项目,专心搞科研!
  17. Qt-绘制圆饼图等-转摘
  18. Hadoop or TDengine,如何做物联网大数据平台的选型?
  19. wasp模型建模经验
  20. 故障电弧融合特征算法

热门文章

  1. 读书笔记 | 《人间处方》夏目漱石写给青年的信
  2. js正则表达式检验经纬度
  3. 如何使用tcpdump来捕获TCP SYN,ACK和FIN包
  4. 压力传感器如何直接连接电脑笔记本采集数据表格导出
  5. 吐血总结让你的项目管理水平提升最快的19种顶级思维
  6. COPYPASTE: AN AUGMENTATION METHOD FOR SPEECH EMOTION RECOGNITION -论文阅读
  7. Android 答题App
  8. activity 工作流引擎-流程表介绍
  9. 【CentOS 7 】密码破解与防破解
  10. An工具介绍之形状工具及渐变变形工具