由于要以微信作一个某学习网站的登陆途径,用小程序就又有一些额外的花费,所以想以微信聊天窗口做些文章,就在网上找了很多关于微信机器人的方法,大多数都是用的老旧并且已经失效的wxpy,没办法了,放弃吗?不可能的,作为一个秃顶男,放弃吧。
整体思路:利用自动化测试库达到预期效果。 运行环境:PyCharm Python
码字流程
获取微信的PID连接到微信微信的一些基本功能获取用户发来的消息获取聊天信息用户在聊天界面找到某个用户搜索某个用户向某个用户发送文本信息删除某个用户
微信的一些额外功能修改备注添加指定申请好友一键添加所有申请好友发送图片至指定用户接收超级用户指令,处理相关任务接收普通用户指令,回复相关内容一键删除所有好友掉线通知超级用户掉线自动重登对接其他接口,完成相关任务收藏信息自动收款判断金额并通知超级用户对接数据库,判断用户是否在使用该功能的期限内一键通知信息至好友指定好友消息免打扰群踢出成员转发信息发送收藏中的内容至用户发送本地文件至用户
获取微信的PID
这里用到了psutil库,大概意思是获取所有的进程,遍历挑选出微信的进程ID
from psutil
import process_iter
def get_pid():
PID
= process_iter
()
name
= ''
pid_num
= 0
for pid_temp
in PID
:
pid_dic
= pid_temp
.as_dict
(attrs
= ['pid','name'])
if pid_dic
['name'] == 'WeChat.exe':
name
= pid_dic
['name']
pid_num
= pid_dic
['pid']
break
if name
=='WeChat.exe':
return pid_num
else :
return False
连接到微信
self
.app
= Application
(backend
= 'uia')
self
.app
.connect
(process
= PID
)
self
.win
= app
[u
'微信']
微信的一些基本功能
获取用户发来的消息
def get_text(self
):
data
= ''
try:
data
= self
.win
.Edit2
.get_value
()
with open('./temporary_text','w',encoding
= 'utf-8') as f
:
f
.write
(data
)
except:
pass
return data
获取聊天信息用户
def get_users(self
):
user_lis
= []
try:
conunacation
= self
.win
.child_window
(title
= "会话",control_type
= "List")
position
= conunacation
.rectangle
()
mouse
.click
(button
= 'left',coords
= (position
.left
+ 100 ,position
.top
+ 10 ))
users
= conunacation
.children
()
for user
in users
:
user_lis
.append
(user
.window_text
())
except:
pass
return user_lis
在聊天界面找到某个用户
def find_user (self
,user
= ''):
user
= self
.win
.child_window
(title
= user
, control_type
= 'Text')
position
= user
.rectangle
()
mouse
.click
(button
= 'left',coords
= (position
.left
,position
.top
))
sleep
(0.3)
搜索某个用户
def search_ueser (self
,user_name
= ''):
search
= self
.win
.child_window
(title
= "搜索", control_type
= "Edit")
position
= search
.rectangle
()
mouse
.click
(button
= 'left', coords
= (position
.left
+ 100 ,position
.top
+ 10))
sleep
(0.1)
mouse
.click
(button
= 'left', coords
= (position
.left
+ 100 ,position
.top
+ 10))
self
.win
.type_keys
(user_name
)
sleep
(0.6)
self
.win
.type_keys
('{ENTER}')
向某个用户发送文本信息
def send_message (self
,texts
=''):
for text
in texts
.split
('\n'):
if text
.isalnum
():
copy
(text
.strip
())
hotkey
('ctrl', 'v')
else:
self
.win
.type_keys
(text
)
sleep
(0.1)
hotkey
('ctrl', 'enter')
hotkey
('enter')
删除某个用户
def delete_user(self
,user
=''):
user
= self
.win
.child_window
(title
= user
, control_type
= 'Text')
position
= user
.rectangle
()
mouse
.click
(button
= 'right', coords
= (position
.left
- 40 ,position
.top
))
self
.app
.Menu
['删除聊天'].click_input
('left')
微信的一些额外功能
由于此程序的使用原因,牵扯到项目的一些敏感内容,不方便将这些功能全部详细说出,只是大概写一下已经实现了哪些内容,如有人需要相关思路,可联系微信:Be_a_luck_dog
修改备注
添加指定申请好友
一键添加所有申请好友
发送图片至指定用户
接收超级用户指令,处理相关任务
接收普通用户指令,回复相关内容
一键删除所有好友
掉线通知超级用户
掉线自动重登
对接其他接口,完成相关任务
收藏信息
自动收款判断金额并通知超级用户
对接数据库,判断用户是否在使用该功能的期限内
一键通知信息至好友
指定好友消息免打扰
群踢出成员
转发信息
发送收藏中的内容至用户
发送本地文件至用户