使用 Python 脚本实现微信自动消息发送
微信自动化
是不是又和女朋友吵架了?
她
生气
又不想接你电话,但是你又不能真的不理她
那就定时
给她打个电话发个消息吧
1.设计目标
实现一个可以定时调用微信
实现定时语音呼叫
和对话
发送的脚本
2.实现原理:
(1)使用python直接调用微信的api貌似不现实,应该也没有这种api预留给我们用户使用吧,我没有了解过,我认为不太可能有
(2)出于实际,我使用简单粗暴的界面脚本
,直接调用微信的exe文件
并使用界面操作库
以及按键库
实现点击微信对应按钮实现自动化功能
(3)使用 Python 的包管理器 pip
来安装这两个库。在你的命令行或终端中,运行以下命令:
pip install pywinauto
pip install uiautomation
这两条命令会分别安装 pywinauto
和 uiautomation
这两个库。
如果你的系统中同时安装了 Python 2 和 Python 3,你可能需要使用 pip3
命令来安装这两个库:
pip3 install pywinauto
pip3 install uiautomation
如果你在安装过程中遇到权限问题,你可以尝试在命令前加上 sudo
(在 Linux 或 macOS 中)或者使用
pip
的 --user
选项来进行安装:
sudo pip install pywinauto
sudo pip install uiautomation
或者
pip install –user pywinauto
pip install –user uiautomation
做好以上准备工作,就可以开始运行代码啦,当然啦,前提是你已经在你的电脑上安装了微信并且登陆了,然后把微信的exe文件地址在代码里进行替换,基本就大功告成啦
下面代码中出现的ClassName
可能在每个人的电脑中不尽相同,如果出现找不到窗口的问题,可以参考我的另一篇博文
代码:
# -*- coding: utf-8 -*-
import os
import time
from pywinauto.keyboard import send_keys # 导入按键操作库
from uiautomation import * # 界面自动化库
class wechat_auto:
"""
初始化函数,依次传入微信的地址, 目标人物微信名, 循环次数(默认为3次), 循环间隔时间(默认5s)
"""
def __init__(self, wechat_address, person_name):
self.wechat_address = wechat_address
self.person_name = person_name
self.open_app(wechat_address)
time.sleep(3) # 等3秒等待软件加载出来
def open_app(self, app_dir):
os.startfile(app_dir)
def page_open(self):
# 进入微信,模拟搜索按键: Ctrl+F
send_keys('^f') # 调用按键输入
send_keys(self.person_name)
time.sleep(1) # 等待搜索到
send_keys('{ENTER}') # 回车键必须全部大小
time.sleep(1) # 等待两秒打开目标任务对话界面
self.wechat_window = WindowControl(searchDepth=1, ClassName="WeChatMainWndForPC")
self.wechat_window.SetActive()
time.sleep(1) # 等待界面稳定
def send_message(self, msg):
# 输入聊天内容
send_keys(msg)
# 回车发送消息
send_keys('{ENTER}')
time.sleep(1)
"""
微信呼叫函数
"""
# cycle_times如果设为-1,则为持续发送
def call(self, cycle_times=3, delay_time=5, wait_time=37):
i = 0
while cycle_times == -1 or i < cycle_times:
self.page_open() # 跳转到目标人物的聊天界面,将其放置在桌面页面最前端
# 在微信聊天界面中查找语音通话按钮
voice_call_button = self.wechat_window.ButtonControl(Name="语音聊天")
if voice_call_button.Exists():
voice_call_button.Click()
time.sleep(wait_time) # 如果拨通,等待一定时间
else:
print("未找到语音通话按钮")
# 对方没有接听,直接取消通话
# 界面跳转到语音聊天框
voice_call_window = WindowControl(searchDepth=1, ClassName="AudioWnd")
voice_call_button = voice_call_window.ButtonControl(Name="取消")
if voice_call_button.Exists():
voice_call_button.Click()
else:
print("未找到取消通话按钮")
time.sleep(1)
# 对方接听,直接挂断\
# 界面跳转到语音聊天框
voice_call_window = WindowControl(searchDepth=1, ClassName="AudioWnd")
voice_call_button = voice_call_window.ButtonControl(Name="挂断")
if voice_call_button.Exists():
voice_call_button.Click()
else:
print("未找到挂断通话按钮")
time.sleep(delay_time)
i = i + 1
# exit() # 退出程序
def send_words(self, words, cycle_times=3, delay_time=5): # cycle_times如果设为-1,则为持续发送
i = 0
while cycle_times == -1 or i < cycle_times:
self.page_open() # 跳转到目标人物的聊天界面,将其放置在桌面页面最前端
# 需要发送的消息内容
for j in range(len(words)):
self.send_message(words[j])
time.sleep(delay_time)
i = i + 1
# exit() # 退出程序
'''
主程序入口
'''
if __name__ == "__main__":
app_dir = r'C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe' # 此处为微信的绝对路径
# 依次传入微信的地址, 目标人物微信名, 循环次数(默认为3次), 循环间隔时间(默认5s), 通话等待时间
auto_send = wechat_auto(app_dir, "老婆")
"""
@Test1
"""
# # 呼叫老婆, 循环呼叫5次, 间隔2秒
# auto_send.call(cycle_times=5, delay_time=2, wait_time=37)
"""
@Test2
"""
# 待发送文字列表,以逗号分隔
word_to_send = ["老婆, 对不起", "老婆, 我爱你"]
auto_send.send_words(word_to_send, cycle_times=5, delay_time=2)
上面的代码我预留了两个测试文件,可以选择注释其中一个运行来运行另一个测试
效果展示:
定时语音通话:
定时文字:
如果有不明白的可以评论区
留下你的精彩评论, 我会时刻留意
并回答~
作者:Rambo_Chin