0


从零开始:用Flask和UIAutomation构建RPA微信自动群发工具

文章目录


前言

在这个数字化时代,微信已经成为我们日常生活中不可或缺的一部分,它不仅仅是一个即时通讯工具,更是一个强大的营销平台。然而,随着用户基数的不断增长,如何高效地管理和利用微信进行营销推广,成为了众多企业和个人所面临的一大挑战。
在这篇文章中,博主将带你一起探索如何从零开始,使用Python的Flask框架和UIAutomation技术,构建一个RPA微信自动群发工具。这不仅是一个技术实践的过程,更是一次深入理解自动化和Web开发的机会。


  1. 提示:以下是本篇文章正文内容,下面案例可供参考

一、环境搭建

系统要求

  • 操作系统:本教程将仅适用于Windows系统。
  • Python:推荐使用Python 3.6及以上版本。Python是一种广泛使用的高级编程语言,非常适合快速开发。

flask安装

Flask是一个轻量级的Web应用框架,我们将使用它来构建后端服务。

  1. 打开命令行。
  2. 输入以下命令来安装Flask:
  1. pip install flask

uiautomation安装

UIAutomation是一个用于自动化用户界面操作的库,我们将用它来模拟微信操作。

  1. 打开命令行。
  2. 输入以下命令来安装uiautomation:
  1. pip install uiautomation

二、群发功能的实现

博主参考了【uiautomation】微信群发消息,可发送文本 & 文件

要导入的包

  1. import os
  2. import time
  3. import subprocess
  4. import uiautomation as auto
  5. from typing import Iterable

1.构建WxOperation类

  1. classWxOperation:"""微信群发消息的类。"""def__init__(self):
  2. auto.SendKeys(text='{Alt}{Ctrl}w')# 快捷键唤醒微信
  3. self.wx_window = auto.WindowControl(Name='微信', ClassName='WeChatMainWndForPC')assert self.wx_window.Exists(),"窗口不存在"
  4. self.input_edit = self.wx_window.EditControl(Name='输入')
  5. self.search_edit = self.wx_window.EditControl(Name='搜索')

2.搜寻被发送人

代码如下(示例):

  1. def__goto_chat_box(self, name:str)->None:"""跳转到指定 name好友的聊天窗口"""assert name,"无法跳转到名字为空的聊天窗口"
  2. self.wx_window.SendKeys(text='{Ctrl}f', waitTime=0.1)
  3. self.wx_window.SendKeys(text='{Ctrl}a', waitTime=2)
  4. self.wx_window.SendKey(key=auto.SpecialKeyNames['DELETE'])
  5. self.search_edit.SendKeys(text=name, waitTime=2)
  6. self.wx_window.SendKey(key=auto.SpecialKeyNames['ENTER'], waitTime=2)
  1. 注意:waitTime时间不可过短 原因:1. 避免被微信屏蔽 2. 给搜索一定的时间

3. 发送文本

  1. def__send_text(self,*msgs)->None:"""发送文本"""for msg in msgs:assert msg,"发送的文本内容为空"
  2. self.__edit_message(msg)
  3. self.wx_window.SendKeys('{Enter}', waitTime=0)#为了解决微信发送文本不能换行的问题def__edit_message(self,msg):
  4. temp =""for char in msg:if char =='*':
  5. self.wx_window.SendKeys(temp, waitTime=1)
  6. self.wx_window.SendKeys('{Shift}{Enter}', waitTime=0)
  7. self.wx_window.SendKeys('{Shift}{Enter}', waitTime=0)
  8. temp =""else:
  9. temp += char
  10. if temp:
  11. self.wx_window.SendKeys(temp, waitTime=1)

4.发送文件

  1. def__send_file(self,*file_paths)->None:"""发送文件"""
  2. all_path =str()for path in file_paths:
  3. full_path = os.path.abspath(path=path)assert os.path.exists(full_path),f"{full_path} 文件路径有误"
  4. all_path +="'"+ full_path +"',"
  5. args =['powershell',f'Get-Item {all_path[:-1]} | Set-Clipboard']
  6. subprocess.Popen(args=args)
  7. time.sleep(0.5)
  8. self.wx_window.SendKeys('{Ctrl}v', waitTime=0.2)
  9. self.wx_window.SendKeys('{Enter}', waitTime=0)

5.接收消息

  1. defsend_msg(self,*names:stror Iterable, msgs: Iterable =None, file_paths: Iterable =None)->None:"""发送消息,可同时发送文本和文件(至少选一项"""assert names,"用户名列表为空"assertany([msgs, file_paths]),"没有发送任何消息"assertnotisinstance(msgs,str),"文本必须为可迭代且非字符串类型"assertnotisinstance(file_paths,str),"文件路径必须为可迭代且非字符串类型"for name in names:
  2. self.__goto_chat_box(name=name)if msgs:
  3. self.__send_text(*msgs)if file_paths:
  4. self.__send_file(*file_paths)

三、构建后端服务

要导入的包

  1. from flask import Flask, render_template, request, redirect, url_for
  2. import os
  3. import time
  4. import subprocess
  5. import pythoncom
  6. import uiautomation as auto
  7. from typing import Iterable
  8. import pandas as pd

文件框架

  • templats - index.html
  • app.py

1. index.html文件

  1. <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>微信群发消息</title><style>textarea{width: 100%;height:150px;padding: 10px;box-sizing: border-box;}</style></head><body><h1>微信群发消息</h1><formmethod="POST"enctype="multipart/form-data"><labelfor="excel_file">上传包含群名称的Excel文件:</label><inputtype="file"id="excel_file"name="excel_file"accept=".xlsx"required><br><br><labelfor="msgs">消息 (以英文逗号分隔,换行用‘*’):</label><!-- <input type="text" id="msgs" name="msgs"><br><br> --><textareaid="msgs"name="msgs"></textarea><br><br><labelfor="files">选择文件:</label><inputtype="file"id="files"name="files"multiple><br><br><inputtype="submit"value="发送"></form></body></html>

2. app.py

  1. app = Flask(__name__)@app.route('/', methods=['GET','POST'])defindex():if request.method =='POST':
  2. excel_file = request.files['excel_file']
  3. excel_path = os.path.join('uploads',excel_file.filename)
  4. excel_file.save(excel_path)
  5. df = pd.read_excel(excel_path)
  6. names = df['Name'].dropna().tolist()# names = request.form.get('names').split(',')
  7. msgs = request.form.get('msgs').split(',')
  8. file_paths = request.files.getlist('files')
  9. file_paths_list =[]forfilein file_paths:iffile.filename:file.save(os.path.join('uploads',file.filename))
  10. file_paths_list.append(os.path.join('uploads',file.filename))
  11. wx = WxOperation()
  12. wx.send_msg(*names,
  13. msgs=msgs if msgs !=['']elseNone,
  14. file_paths=file_paths_list if file_paths_list elseNone)return redirect(url_for('index'))return render_template('index.html')if __name__ =='__main__':ifnot os.path.exists('uploads'):
  15. os.makedirs('uploads')
  16. app.run(debug=True)
  1. 注意:不要忘记引入WxOperation

四、成果展示

在这里插入图片描述
该网页允许发送多条消息或者不发,发送多份文件或者不发。
注意发送多份文件时要一次性选中

总结

在这篇文章中,我们探索了如何利用Flask和UIAutomation技术构建一个微信自动群发工具。博主从项目的目标和预期成果开始,逐步深入到技术细节,最终提供了一个全面的解决方案。

标签: flask rpa 微信

本文转载自: https://blog.csdn.net/YQQ_0424/article/details/141860859
版权归原作者 YQQ学习日记 所有, 如有侵权,请联系我们删除。

“从零开始:用Flask和UIAutomation构建RPA微信自动群发工具”的评论:

还没有评论