基于pyautogui编写的一款简单的微信自动发送信息程序

本文介绍了如何使用Python库PyAutoGUI编写一个小程序,实现微信自动发送消息,通过模拟鼠标和键盘操作,简化了手动发送的过程。详细步骤包括安装库、关键代码实现、界面展示以及使用方法。
部署运行你感兴趣的模型镜像

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

编写这款微信自动发消息.exe程序主要是因为和朋友在微信互相刷屏扔[炸弹]表情,自己手动发太累了,但哥们又不服输,嘿嘿,刚好在学习python,就想着自己写一个简单的脚本文件,直接自动轰炸到他叫爸爸!
文末有下载地址!


一、PyAutoGUI简介

PyAutoGUI 是一个 Python 库,用于实现自动化 GUI 操作的功能。它可以通过模拟鼠标移动、点击、键盘输入等操作来实现对计算机屏幕上 GUI 元素的控制。我们就是通过PyAutoGUI 来模拟鼠标移动点击进行游戏中化肥购买的一个流程。

二、使用步骤

1.下载PyAutoGUI

在终端输入:

pip install pyautogui

执行上述命令后,pip 将自动下载并安装 PyAutoGUI 库及其依赖项。等待安装过程完成。

安装完成可以在终端输入:

import pyautogui

如果没有出现错误信息,说明 PyAutoGUI 已经成功安装。

2.引入库

在编写的py文件中输入:

import pyautogui

将pyautogui引入到类中使用

3.关键代码

选择文本,读取文本内容

def open_file():
    global content_var
    global file_name_var

    file_path = filedialog.askopenfilename(filetypes=[('Text Files', '*.txt')])
    if file_path:
        with open(file_path, 'rb') as file:
            sz = os.path.getsize(file_path)
            if not sz:
                messagebox.showerror("错误", "打开文本为空,请重新选择")
                return
            else:
                raw_data = file.read()
                result = chardet.detect(raw_data)
                encoding = result['encoding']
                content = raw_data.decode(encoding)
                print(content)
                content_var = content

                file_name = os.path.basename(file_path)
                print(file_name)
                file_name_var.set(file_name)

切割文本内容,逐条发送

def get_msg(contents):
    # 想发的消息,每条消息空格或换行符分开
    return re.split(r'\s+|\\n', contents)

模拟按键,进行复制粘贴

def send(msg):
    # 复制需要发送的内容到粘贴板
    pyperclip.copy(msg)
    # 模拟键盘 ctrl + v 粘贴内容
    pyautogui.hotkey('ctrl', 'v')
    # 发送消息
    pyautogui.press('enter')

设置参数进行循环发送

def send_msg(friend, bomb, interval, sendmsg):
    global pause_flag
    global thread_running_flag
    # 检查是否输入昵称
    if friend_name_var.get() is None or friend_name_var.get() == "":
        messagebox.showerror("错误", "请先输入朋友昵称")
        return
    # 检查朋友昵称长度限制
    if len(friend_name_var.get()) > 32:
        messagebox.showerror("错误", "朋友昵称长度超过限制")
        return
    # 检查发送次数类型和最大限制
    try:
        if bomb_sum_var.get() <= 0 or bomb_sum_var.get() > 10000:  # 最大限制为10000
            messagebox.showerror("错误", "发送次数应为1-10000之间的整数")
            return
    except ValueError:
        messagebox.showerror("错误", "发送次数应为整数")
        return

    # 检查是否选择文本
    if content_var is None or content_var == "":
        messagebox.showerror("错误", "请先选择文本文件")
        return
    print(thread_running_flag)
    if thread_running_flag:  # 线程开始执行任务,更改标识
        thread_running_flag = False
        set_button(start_btn, end_btn)
    print(thread_running_flag)

    while not thread_running_flag:  # 判断标志是否为False
        # Ctrl + alt + w 打开微信
        pyautogui.hotkey('ctrl', 'alt', 'w')
        # 搜索好友
        pyautogui.hotkey('ctrl', 'f')
        # 复制好友昵称到粘贴板
        pyperclip.copy(friend)
        # 模拟键盘 ctrl + v 粘贴
        pyautogui.hotkey('ctrl', 'v')
        time.sleep(1)
        # 回车进入好友消息界面
        pyautogui.press('enter')
        time.sleep(1)  # 等待搜索

        num = 1
        while num <= bomb:
            for msg in get_msg(sendmsg):
                if pause_flag:  # 为True时进入
                    while pause_flag:  # 为True时进入循环,False时跳出循环
                        time.sleep(0.1)
                send(msg)
                time.sleep(interval)

            num += 1

        thread_running_flag = True  # False变True
        pause_flag = False
        set_button(start_btn, end_btn)
        keyboard.unhook_all()  # 移除之前所有的监听

微信打开窗口默认是ctrl+alt+w,QQ默认是ctrl+alt+x 如果想用QQ发可以自己加个按键进行切换,或者直接把QQ的快捷打开也设置为ctrl+alt+w就同样适配QQ的发送啦~
点击启动按钮后执行

def start():
    global friend_name_var
    global content_var
    global bomb_sum_var
    global interval_time_var
    global pause_flag
    global thread_send

    keyboard.unhook_all()  # 移除之前所有的监听

    if __name__ == '__main__':
        # 好友昵称
        friend_name = friend_name_var.get()
        # 信息次数
        bomb_sum = bomb_sum_var.get()
        # 间隔时间
        interval_time = interval_time_var.get()
        # 发送信息(用空格分隔开需要发送的每条信息)
        send_str = content_var

        keyboard.on_release(on_release)  # on_press 按下监听 on_release 释放监听
        thread_send = threading.Thread(target=send_msg, args=(friend_name, bomb_sum, interval_time, send_str))
        thread_send.setDaemon(True)  # 守护线程(主线程结束子线程也结束)
        thread_send.start()

监听是我设置了个暂停发送的按键, F1 。如果用完不移除的话,会导致有多个监听达不到预期的暂停效果。

4.界面展示

界面
因为是空闲时间做的小软件,界面就没费什么心思,使用的基本是原生的pythonGUI,有时间的小伙伴可以自己优化下


总结

这个也有参考吧里帖子,但是这是上上星期写的,我没找到当时参考的帖子记录,抱歉抱歉~
总的来说,这就是一款没什么大用但又有点作用的小程序,比较适合我这种无聊的人,嘿嘿~
链接:https://pan.baidu.com/s/1mg7gFlbaNy0t_8YFw81qmQ?pwd=QQQA
提取码:QQQA

如果觉得有意思的话,记得点个赞哦

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值