社区编辑申请
注册/登录
利用Python制作属于自己的微信小客服
开发 后端
由于要以微信作一个某学习网站的登陆途径,用小程序就又有一些额外的花费,所以想以微信聊天窗口做些文章,就在网上找了很多关于微信机器人的方法,大多数都是用的老旧并且已经失效的wxpy,没办法了,放弃吗?

 由于要以微信作一个某学习网站的登陆途径,用小程序就又有一些额外的花费,所以想以微信聊天窗口做些文章,就在网上找了很多关于微信机器人的方法,大多数都是用的老旧并且已经失效的wxpy,没办法了,放弃吗?

整体思路:利用自动化测试库达到预期效果。

运行环境:PyCharm Python

码字流程

  • 获取微信的PID
  • 连接到微信
  • 微信的一些基本功能
  • 获取用户发来的消息获取聊天信息用户在聊天界面找到某个用户搜索某个用户向某个用户发送文本信息删除某个用户
  • 微信的一些额外功能
  • 修改备注添加指定申请好友一键添加所有申请好友发送图片至指定用户接收超级用户指令,处理相关任务接收普通用户指令,回复相关内容一键删除所有好友掉线通知超级用户掉线自动重登对接其他接口,完成相关任务收藏信息自动收款判断金额并通知超级用户对接数据库,判断用户是否在使用该功能的期限内一键通知信息至好友指定好友消息免打扰群踢出成员转发信息发送收藏中的内容至用户发送本地文件至用户

 

  

获取微信的PID

这里用到了psutil库,大概意思是获取所有的进程,遍历挑选出微信的进程ID

  1. #!/usr/bin/env python 
  2. # -*- coding:utf-8 -*- 
  3. # Author:smart_num_1 
  4. # Blog:https://blog.csdn.net/smart_num_1 
  5. from psutil import process_iter 
  6. def get_pid(): 
  7.     PID = process_iter() 
  8.     name = '' 
  9.     pid_num = 0 
  10.     for pid_temp in PID: 
  11.         pid_dic = pid_temp.as_dict(attrs = ['pid','name']) 
  12.         if pid_dic ['name'] == 'WeChat.exe'
  13.             name = pid_dic ['name'
  14.             pid_num = pid_dic ['pid'
  15.             break 
  16.     if name =='WeChat.exe'
  17.         return pid_num 
  18.     else : 
  19.         return False 

连接到微信

  1. # 创建一个实例对象,Pywinauto中backend有两种:win32和uia,默认为win32。可使用spy++和Inspect工具判断backend适合写哪种。在这里微信为'uia' 
  2. self.app = Application(backend = 'uia'
  3.  
  4. # 将 app 连接到已经登陆成功的微信,这里可以用进程ID、句柄、以及程序路径进行连接,此处采用PID 
  5. self.app.connect(process = PID ) 
  6.  
  7. # 定位到微信窗口 
  8. self.win = app[u'微信'

微信的一些基本功能

获取用户发来的消息

  1. def get_text(self): 
  2.     data = '' 
  3.     try: 
  4.         data = self.win.Edit2.get_value() 
  5.         with open('./temporary_text','w',encoding = 'utf-8'as f: 
  6.             f.write(data) 
  7.     except
  8.         pass 
  9.     return data #line:4 

获取聊天信息用户

  1. def get_users(self): 
  2.     user_lis = [] 
  3.     try: 
  4.         # 定位到信息列表,获取这个对象 
  5.         conunacation = self.win.child_window(title = "会话",control_type = "List"
  6.         # 定位到这个位置 
  7.         position = conunacation.rectangle() 
  8.         mouse.click(button = 'left',coords = (position.left + 100 ,position.top + 10 )) 
  9.          
  10.         # 定位到列表的位置,取他的子控件,至于为何,列表是一个总的容器,而每个用户都存在这个容器中,固取子控件 
  11.         users = conunacation.children() 
  12.         for user in users: 
  13.             user_lis.append(user.window_text()) 
  14.     except
  15.         pass 
  16.     return user_lis 

在聊天界面找到某个用户

  1. def find_user (self ,user = ''): 
  2.     # 找到指定名称用户的按钮 
  3.     user = self.win.child_window(title = user, control_type = 'Text'
  4.      
  5.     # 定位到该按钮,获取它的相对位置 
  6.     position = user .rectangle() 
  7.      
  8.     # 模拟点击,coords 是点击的位置 
  9.     mouse.click (button = 'left',coords = (position.left ,position.top)) 
  10.     sleep(0.3) 

搜索某个用户

  1. def search_ueser (self ,user_name = ''): 
  2.     # 找控件的方法如上个函数中介绍,此处不再继续介绍 
  3.     search = self.win.child_window(title = "搜索", control_type = "Edit"
  4.     position = search.rectangle() 
  5.     mouse.click(button = 'left', coords = (position.left + 100 ,position.top + 10)) 
  6.     sleep(0.1) 
  7.     mouse.click(button = 'left', coords = (position.left + 100 ,position.top + 10)) 
  8.      
  9.     # 自带的模块,输入该用户的名字 
  10.     self.win.type_keys(user_name) 
  11.     sleep(0.6) 
  12.     self.win.type_keys('{ENTER}'

向某个用户发送文本信息

  1. def send_message (self ,texts =''):#line:64 
  2.     for text in texts .split ('\n'):#line:65 
  3.         # 这里用到了另外的一个库,因为用pywinauto 自带的输入模块,表情,空格等是自动略过或者识别不出,达不到按原有缩进样式缩进的效果 
  4.         if text.isalnum(): 
  5.             copy(text.strip()) 
  6.             hotkey ('ctrl''v'
  7.         else
  8.             self.win.type_keys(text) 
  9.         sleep(0.1) 
  10.         hotkey ('ctrl''enter')#line:67 
  11.     hotkey ('enter')#line:68 

删除某个用户

  1. def delete_user(self ,user =''): 
  2.     user = self.win.child_window(title = user, control_type = 'Text'
  3.     position = user.rectangle() 
  4.     mouse.click(button = 'right', coords = (position.left - 40 ,position.top)) 
  5.     # 这里右键会弹出菜单,直接点击该菜单中的删除聊天选项 
  6.     self.app.Menu ['删除聊天'].click_input('left'

微信的一些额外功能

由于此程序的使用原因,牵扯到项目的一些敏感内容,不方便将这些功能全部详细说出,只是大概写一下已经实现了哪些内容,如有人需要相关思路,可联系微信:Be_a_luck_dog

 

  • 修改备注
  • 添加指定申请好友
  • 一键添加所有申请好友
  • 发送图片至指定用户
  • 接收超级用户指令,处理相关任务
  • 接收普通用户指令,回复相关内容
  • 一键删除所有好友
  • 掉线通知超级用户
  • 掉线自动重登
  • 对接其他接口,完成相关任务
  • 收藏信息
  • 自动收款判断金额并通知超级用户
  • 对接数据库,判断用户是否在使用该功能的期限内
  • 一键通知信息至好友
  • 指定好友消息免打扰
  • 群踢出成员
  • 转发信息
  • 发送收藏中的内容至用户
  • 发送本地文件至用户

 

 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-12-14 15:20:37

2018-05-16 09:10:10

Python爬虫微信好友

2020-05-16 12:06:32

微信公众平台Python开发

2020-05-18 08:58:33

Python开发工具

2018-06-08 16:18:43

2014-11-17 11:13:17

易维

2020-03-10 10:06:08

2021-08-16 11:25:41

2021-12-22 09:25:14

同话题下的热门内容

超全!Python图形界面框架PyQt5使用指南!太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python居然被用来开发游戏了?盘点你想不到的Python开发场景浅谈Python+requests+pytest接口自动化测试框架的搭建跟着 Guava 学 Java 之 不可变集合Python轻量级Web框架:Bottle库!用 Taichi 加速 Python:提速 100+ 倍!实战 | 如何用 Python 自动化监控文件夹完成服务部署!

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号