python微信PC端自动化

您所在的位置:网站首页 微信python接口 python微信PC端自动化

python微信PC端自动化

2024-07-17 14:56:19| 来源: 网络整理| 查看: 265

背景

目前已有许多微信客户端的自动化工具,可供我们自动获取聊天记录、发送消息等等。不过微信网页版现在已无法登录,因此一些python库如itchat、wxpy等已经无法使用了(基于网页)。 现在有大佬开发出了一个好玩的微信自动化python库——wxauto。wxauto基于uiautomation、win32gui等自动化工具,利用windows桌面协议模拟用户的鼠标、键盘事件,实现对微信PC端的自动化操作,可供我们用于开发微信聊天机器人、群管理机器人等等。 github地址:https://github.com/cluic/wxauto

项目准备

1. 微信PC客户端 (注:这里最好把微信客户端升级至较新版本)

2. python3.x

3. wxauto pip install wxauto -i https://pypi.tuna.tsinghua.edu.cn/simple

具体方法 1. 获取默认窗口的聊天记录

不指定好友或微信群时,获取微信客户端当前显示的窗口聊天记录。获取范围是当前窗口滚动条所能达到的范围。

from wxauto import * wx = WeChat() # 获取当前微信客户端 wx.GetSessionList() # 获取会话列表 def get_default_messages(): # 调用wxauto中的方法:GetAllMessage msgs = wx.GetAllMessage for msg in msgs: print('%s : %s' % (msg[0], msg[1])) if __name__ == '__main__': get_default_messages() 2. 获取指定好友或群聊天记录

若想指定获取某人或者某个微信群的聊天记录,wxauto中有一个ChatWith的方法,可以指定获取的聊天窗口:

def ChatWith(self, who, RollTimes=None): ''' 打开某个聊天框 who : 要打开的聊天框好友名,str; * 最好完整匹配,不完全匹配只会选取搜索框第一个 RollTimes : 默认向下滚动多少次,再进行搜索 ''' self.UiaAPI.SwitchToThisWindow() RollTimes = 10 if not RollTimes else RollTimes # 当前显示的聊天列表中没找到指定名称的好友或群时,会滚动聊天列表界面,继续寻找 def 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 1 return 0 rollresult = roll_to() if rollresult: return 1 else: self.Search(who) # 当前显示的聊天列表中没找到指定名称的好友或群时,直接在搜索框中搜索 return roll_to(RollTimes=1)

整理后代码如下:

from wxauto import * wx = WeChat() wx.GetSessionList() def get_single_messages(name): wx.ChatWith(name) msgs = wx.GetAllMessage for msg in msgs: print('%s : %s' % (msg[0], msg[1])) def get_multi_messages(names): for name in names: wx.ChatWith(name) msgs = wx.GetAllMessage for msg in msgs: print('%s : %s' % (msg[0], msg[1])) if __name__ == '__main__': name = "好友昵称" get_single_messages(name) names = ['好友昵称', '微信群'] get_multi_messages(names)

实际上,“获取指定好友或群消息”这一功能也是从方法1中扩展而来,原理很简单。ChatWith中的self.SessionList.ListItemControl(Name=who).Click()就是模拟用户鼠标,点击指定名称的聊天item,使得该名称的聊天窗口成为当前窗口,再调用wx.GetAllMessage获取聊天记录。

3. 获取更多聊天记录

如果不满足于获取当前窗口滚动条范围内的聊天记录,想要获取更多的,我们可以使用wxauto中的LoadMoreMessage()。不过官方的方法是直接在当前展示的窗口向上滚动一定的距离,经过试验后发现,有时候方法失效,无法拿到更多消息。 本人在此方法中做了改进:

(1)先定位到聊天窗口顶部的“查看更多消息”; (2)然后点击“查看更多消息”,加载出更早的聊天记录; (3)调用wx.GetAllMessage获取聊天记录。

改进后的获取更多聊天记录的方法如下:

def rollToTop(self): """ 注意,本方法采用发送键盘事件来使聊天窗口跳转到顶部,因此先模拟鼠标点击微信聊天窗口,将其变为当前活跃窗口。不然发送键盘事件可能会失灵 """ # 计算窗口中央的位置 rect = self.UiaAPI.BoundingRectangle x = rect.right - 100 center_y = rect.top + rect.height() // 2 # 定位至窗口顶端 uia.Click(x, center_y) self.MsgList.SendKeys('{Home}', waitTime=1) # 按键盘上的“Home”键,跳转至窗口顶部 children = self.MsgList.GetChildren() # 遍历所有子元素 for child in children: if child.ControlType == uia.ControlType.ButtonControl and child.Name == '查看更多消息': child.Click() break uia.Click(x, center_y)

注意,rollToTop方法需要添加到wxauto.py中的WeChat类中,因为需要调用WeChat类中的一些变量。 main方法中调用方法,获取更多聊天记录:

from wxauto import * wx = WeChat() wx.GetSessionList() def get_more_messages(name): wx.ChatWith(name) wx.rollToTop() msgs = wx.GetAllMessage for msg in msgs: print('%s : %s' % (msg[0], msg[1])) if __name__ == '__main__': name = "好友昵称" get_more_messages(name)


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭