用Python实现微信群发的代码结合pyautogui和窗口操作实现来实现

步骤一:安装PyInstaller

在命令行中执行以下命令安装(建议使用清华镜像加速下载):

 

Bash

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller


步骤二:打包微信群发脚本

  1. 创建打包命令
    假设你的脚本文件名为 wechat_bot.py,在脚本目录下打开命令行,输入以下命令:

     

    Bash

    pyinstaller -F -w --icon=wechat.ico wechat_bot.py

    • -F:生成单个exe文件
    • -w:隐藏命令行窗口(避免微信操作时弹出黑框)
    • --icon=wechat.ico:可选参数,自定义exe图标(需准备ico文件)
  2. 获取打包结果
    打包完成后,生成的exe文件位于 dist 文件夹内,双击即可运行。


常见问题处理(参考 

1

 

3

  1. 依赖缺失

    • 若exe运行时闪退,尝试打包时保留控制台以查看报错:
       

      Bash

      pyinstaller -F wechat_bot.py # 去掉 -w

    • 确保代码中所有第三方库(如 pyautogui)已正确安装。
  2. 文件体积过大
    使用以下方式优化:

     

    Bash

    pyinstaller -F -w --upx-dir=upx_folder wechat_bot.py

    • 需提前下载UPX压缩工具,解压后指定路径 --upx-dir
  3. 图标不显示
    确认图标文件为 .ico 格式,建议使用在线转换工具生成:http://www.bitbug.net/


高级需求(参考 

6

 

7

若需要图形化操作,可使用 auto-py-to-exe

  1. 安装:
     

    Bash

    pip install auto-py-to-exe

  2. 启动:
     

    Bash

    auto-py-to-exe

    • 通过网页界面选择脚本、设置参数(如单文件/隐藏窗口等)。

注意事项

  • 打包前务必在PC版微信中测试脚本功能正常。
  • 若脚本涉及外部文件(如配置文件),需手动复制到exe同目录 

    4

  • 群发频率建议≥15秒/条,避免被微信限制 

    1

    import sys
    import pyautogui
    import pyperclip
    import time
    from PySide6.QtWidgets import (QApplication, QMainWindow, QPushButton, 
                                  QTextEdit, QListWidget, QFileDialog, QProgressBar)
    from PySide6.QtCore import Qt, QThread, Signal
    
    class WechatBotThread(QThread):
        progress = Signal(int)
        message = Signal(str)
    
        def __init__(self, contacts, messages, files=None):
            super().__init__()
            self.contacts = contacts
            self.messages = messages
            self.files = files or []
            self._is_running = True
    
        def locate_wechat_window(self):
            try:
                win = pyautogui.getWindowsWithTitle('微信')[0]
                win.activate()
                return win.left, win.top, win.width, win.height
            except IndexError:
                self.message.emit("错误:未找到微信窗口")
                return None
    
        def search_contact(self, name):
            pyautogui.hotkey('ctrl', 'f')
            time.sleep(0.5)
            pyperclip.copy(name)
            pyautogui.hotkey('ctrl', 'v')
            time.sleep(0.5)
            pyautogui.press('enter')
            time.sleep(1)
    
        def send_files(self):
            # 文件发送功能(参考)
            pyautogui.hotkey('ctrl', 'alt', 'f')
            time.sleep(1)
            for file in self.files:
                pyperclip.copy(file)
                pyautogui.hotkey('ctrl', 'v')
                time.sleep(1)
                pyautogui.press('enter')
                time.sleep(2)
    
        def run(self):
            try:
                win_pos = self.locate_wechat_window()
                if not win_pos:
                    return
    
                total = len(self.contacts)
                for i, contact in enumerate(self.contacts):
                    if not self._is_running:
                        break
                    
                    self.search_contact(contact)
                    time.sleep(1)
                    
                    # 发送文本消息
                    for msg in self.messages:
                        pyperclip.copy(msg.replace("{name}", contact))
                        pyautogui.hotkey('ctrl', 'v')
                        pyautogui.press('enter')
                        time.sleep(2)
                    
                    # 发送文件(参考)
                    if self.files:
                        self.send_files()
                    
                    self.progress.emit(int((i+1)/total*100))
                    self.message.emit(f"已发送给:{contact}")
                    
            except Exception as e:
                self.message.emit(f"错误:{str(e)}")
    
        def stop(self):
            self._is_running = False
    
    class WechatMassSender(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
            self.contacts = []
            self.messages = []
            self.files = []
    
        def initUI(self):
            self.setWindowTitle("微信智能群发助手 v2.0")
            self.setGeometry(300, 300, 800, 600)
    
            # 联系人列表控件
            self.btn_load_contacts = QPushButton("导入联系人", self)
            self.btn_load_contacts.move(20, 20)
            self.btn_load_contacts.clicked.connect(self.load_contacts)
    
            self.list_contacts = QListWidget(self)
            self.list_contacts.setGeometry(20, 60, 200, 400)
    
            # 消息编辑控件
            self.btn_edit_msg = QPushButton("编辑消息", self)
            self.btn_edit_msg.move(240, 20)
            self.btn_edit_msg.clicked.connect(self.edit_message)
    
            self.txt_message = QTextEdit(self)
            self.txt_message.setGeometry(240, 60, 400, 200)
            self.txt_message.setPlaceholderText("支持使用{name}作为姓名占位符\n每行一条消息")
    
            # 文件选择控件
            self.btn_add_files = QPushButton("添加附件", self)
            self.btn_add_files.move(240, 270)
            self.btn_add_files.clicked.connect(self.add_files)
    
            # 进度条
            self.progress = QProgressBar(self)
            self.progress.setGeometry(20, 480, 760, 30)
    
            # 控制按钮
            self.btn_start = QPushButton("开始发送", self)
            self.btn_start.move(240, 320)
            self.btn_start.clicked.connect(self.start_sending)
    
            self.btn_stop = QPushButton("停止", self)
            self.btn_stop.move(400, 320)
            self.btn_stop.clicked.connect(self.stop_sending)
    
        def load_contacts(self):
            # 联系人导入功能(参考)
            path, _ = QFileDialog.getOpenFileName(self, "选择联系人文件", "", "Text Files (*.txt)")
            if path:
                with open(path, 'r', encoding='utf-8') as f:
                    self.contacts = [line.strip() for line in f if line.strip()]
                self.list_contacts.addItems(self.contacts)
    
        def edit_message(self):
            self.messages = self.txt_message.toPlainText().split('\n')
    
        def add_files(self):
            files, _ = QFileDialog.getOpenFileNames(self, "选择附件")
            if files:
                self.files = files
    
        def start_sending(self):
            if not self.contacts:
                self.show_message("请先导入联系人")
                return
            if not self.messages:
                self.show_message("请先编辑消息内容")
                return
    
            self.thread = WechatBotThread(self.contacts, self.messages, self.files)
            self.thread.progress.connect(self.update_progress)
            self.thread.message.connect(self.show_message)
            self.thread.start()
    
        def stop_sending(self):
            if hasattr(self, 'thread'):
                self.thread.stop()
    
        def update_progress(self, value):
            self.progress.setValue(value)
    
        def show_message(self, msg):
            self.statusBar().showMessage(msg)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = WechatMassSender()
        window.show()
        sys.exit(app.exec())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值