使用 Python 脚本实现微信自动消息发送

微信自动化

是不是又和女朋友吵架了?

生气又不想接你电话,但是你又不能真的不理她



那就定时给她打个电话发个消息吧



1.设计目标

实现一个可以定时调用微信实现定时语音呼叫对话发送的脚本

2.实现原理:

(1)使用python直接调用微信的api貌似不现实,应该也没有这种api预留给我们用户使用吧,我没有了解过,我认为不太可能有

(2)出于实际,我使用简单粗暴的界面脚本,直接调用微信的exe文件并使用界面操作库以及按键库实现点击微信对应按钮实现自动化功能

(3)使用 Python 的包管理器 pip 来安装这两个库。在你的命令行或终端中,运行以下命令:


pip install pywinauto

pip install uiautomation

这两条命令会分别安装 pywinautouiautomation 这两个库。

如果你的系统中同时安装了 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)

上面的代码我预留了两个测试文件,可以选择注释其中一个运行来运行另一个测试



效果展示:

定时语音通话:

photo1

定时文字:

photo2

如果有不明白的可以评论区留下你的精彩评论, 我会时刻留意并回答~

作者:Rambo_Chin

物联沃分享整理
物联沃-IOTWORD物联网 » 使用 Python 脚本实现微信自动消息发送

发表回复