使用Python打造全自动wx好友添加器:批量操作,高效省时的社交神器

news2024/9/21 11:13:59

在现代的数字营销和社交扩展中,自动化操作可以显著提高效率。尤其是wx这种广泛使用的即时通讯工具,很多用户有批量添加好友的需求,但手动操作费时费力。本教程将详细介绍如何使用 Python 开发一个自动化工具,帮助你批量添加wx好友。我们将通过一个图形用户界面 (GUI),结合 Excel 文件和微信自动化操作来实现这一需求。

项目概述

这个项目的核心目标是创建一个 Python 程序,可以自动从 Excel 文件中读取微信号和备注信息,然后通过自动化操作微信客户端,实现批量添加好友的功能。项目涉及几个关键技术,包括图形界面、Excel 文件处理和自动化操作等。

项目依赖

为了实现这个项目,我们需要以下 Python 库:

  1. Tkinter:Python 的标准 GUI 库,用于创建图形用户界面。
  2. uiautomation:Windows 自动化库,能与微信客户端进行交互。
  3. Pandas:用于处理 Excel 文件中的微信号和备注数据。
  4. logging:用于记录程序执行日志,便于调试和错误追踪。
  5. xlrd2:用于读取 Excel 文件(特别是 .xls 文件)。

安装依赖

首先,确保您已经安装了所需的库。可以通过以下命令在命令行中安装这些库:

pip install uiautomation pandas xlrd2 openpyxl

Tkinter 是 Python 的内置库,无需安装。

项目结构与功能设计

1. Tkinter 界面设计

我们使用 Tkinter 来设计图形用户界面 (GUI)。界面包括以下几个功能模块:

  • 微信路径选择:用户选择微信安装路径。
  • Excel 文件选择:用户选择包含微信号和备注的 Excel 文件。
  • 备注输入:允许用户输入好友备注信息。
  • 定时任务设置:用户可以选择定时启动任务。
  • 日志显示区域:显示任务执行过程中产生的日志。
1.1 构建 GUI 界面

通过 Tkinter 创建一个简单的主窗口,并添加各种输入框、按钮、文本框等组件。

import tkinter as tk
from tkinter import filedialog, messagebox, ttk, scrolledtext

class WeChatAutoApp:
    def __init__(self, master):
        self.master = master
        self.master.title("微信自动化工具")
        self.master.geometry("600x600+300+200")  # 设置窗口大小和位置
        self.master.configure(bg='#f0f0f0')  # 设置背景颜色

        # 创建组件
        self.create_widgets()

    def create_widgets(self):
        # 微信安装路径输入框
        self.wechat_path_label = ttk.Label(self.master, text="微信安装路径:", background='#f0f0f0')
        self.wechat_path_label.grid(row=0, column=0, padx=10, pady=10, sticky=tk.W)
        self.wechat_path_var = tk.StringVar()
        self.wechat_path_entry = ttk.Entry(self.master, width=50, textvariable=self.wechat_path_var)
        self.wechat_path_entry.grid(row=0, column=1, padx=10, pady=10)
        self.choose_wechat_button = ttk.Button(self.master, text="选择微信", command=self.choose_wechat_path)
        self.choose_wechat_button.grid(row=0, column=2, padx=10, pady=10)

        # 导入微信账号 Excel 文件
        self.excel_path_label = ttk.Label(self.master, text="导入微信账号Excel:", background='#f0f0f0')
        self.excel_path_label.grid(row=1, column=0, padx=10, pady=10, sticky=tk.W)
        self.excel_path_var = tk.StringVar()
        self.excel_path_entry = ttk.Entry(self.master, width=50, textvariable=self.excel_path_var)
        self.excel_path_entry.grid(row=1, column=1, padx=10, pady=10)
        self.choose_excel_button = ttk.Button(self.master, text="选择Excel", command=self.choose_excel_path)
        self.choose_excel_button.grid(row=1, column=2, padx=10, pady=10)

        # 备注文本框
        self.remarks_label = ttk.Label(self.master, text="备注:", background='#f0f0f0')
        self.remarks_label.grid(row=2, column=0, padx=10, pady=10, sticky=tk.W)
        self.remarks_text = tk.Text(self.master, height=5, width=50)
        self.remarks_text.grid(row=2, column=1, padx=10, pady=10)

2. 处理 Excel 文件

在自动化操作前,我们需要读取包含微信号和备注信息的 Excel 文件。可以通过 Pandas 轻松读取这些数据,并进行后续处理。

2.1 读取 Excel 文件

假设 Excel 文件包含两列:微信号和备注。我们使用 pandas.read_excel 读取文件,并将数据存储为一个 DataFrame。

import pandas as pd

def read_excel_file(file_path):
    try:
        df = pd.read_excel(file_path)
        accounts = df['微信号'].tolist()  # 从 Excel 表格中读取微信号
        names = df['备注'].tolist()  # 读取备注信息
        return accounts, names
    except Exception as e:
        print(f"读取 Excel 文件出错: {e}")
        return [], []

3. 自动化操作微信

通过 uiautomation 库,我们可以模拟人工操作微信客户端,逐步执行添加好友的任务。

3.1 自动化与微信交互

首先,启动微信客户端,等待其加载完成,然后通过 uiautomation 库找到微信窗口和相应的控件,模拟点击和输入操作。

import uiautomation as auto
import subprocess
import time

def run_automation(wechat_path, accounts, names):
    # 启动微信客户端
    subprocess.Popen([wechat_path])
    time.sleep(10)  # 等待微信加载完成

    # 查找微信主窗口
    wechat_window = auto.WindowControl(searchDepth=1, ClassName='WeChatMainWndForPC', Name='微信')

    for account, name in zip(accounts, names):
        try:
            # 点击通讯录
            contacts_button = wechat_window.ButtonControl(Name='通讯录')
            contacts_button.Click()
            time.sleep(1)

            # 点击添加朋友
            add_friend_button = wechat_window.ButtonControl(Name='添加朋友')
            add_friend_button.Click()
            time.sleep(1)

            # 输入微信号
            search_box = wechat_window.EditControl(Name='微信号/手机号')
            search_box.SetValue(account)
            time.sleep(1)

            # 查找联系人并添加
            contact_result = wechat_window.TextControl(Name=account)
            contact_result.Click()
            time.sleep(1)

            # 输入备注并发送请求
            add_to_contacts_button = wechat_window.ButtonControl(Name='添加到通讯录')
            add_to_contacts_button.Click()
            time.sleep(1)

            remarks_box = wechat_window.EditControl(Name='')
            remarks_box.SendKeys(name)
            time.sleep(1)

            confirm_button = wechat_window.ButtonControl(Name='确定')
            confirm_button.Click()
            time.sleep(1)

        except Exception as e:
            print(f"添加好友 {account} 失败: {e}")

4. 日志记录系统

为了更好地调试和追踪程序运行状态,日志记录是非常重要的。我们使用 logging 库,并通过自定义的日志处理器将日志输出到 GUI 界面的文本框中。

4.1 创建自定义日志处理器

自定义日志处理器继承自 logging.Handler,将日志消息写入 ScrolledText 控件中,实时显示。

import logging

class CustomHandler(logging.Handler):
    def __init__(self, log_text):
        super().__init__()
        self.log_text = log_text

    def emit(self, record):
        msg = self.format(record)
        self.log_text.configure(state='normal')
        self.log_text.insert(tk.END, msg + '\n')
        self.log_text.configure(state='disabled')
        self.log_text.yview(tk.END)

5. 定时任务

有时,用户希望程序在特定时间运行。我们通过 Tkinter 的 after 方法实现定时任务,用户可以选择任务在特定时间执行。

import datetime

def set_schedule(hour, minute, second):
    now = datetime.datetime.now()
    scheduled_time = now.replace(hour=int(hour), minute=int(minute), second=int(second))

    if scheduled_time < now:
        scheduled_time += datetime.timedelta(days=1)

    time_until_start = scheduled_time - now
    root.after(int(time_until_start.total_seconds() * 1000), start_automation)

6. 程序执行流程

整个程序的执行流程如下:

  1. 用户通过界面选择微信安装路径和 Excel 文件,输入备注信息。
  2. 用户可以手动启动任务,或者设置定时任务。
  3. 程序通过读取 Excel

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宏任务和微任务+超全面试真题(持续更新ing

概念 微任务和宏任务是在异步编程中经常使用的概念&#xff0c;用于管理任务的执行顺序和优先级。 宏任务&#xff1a;setTimeout, setInterval&#xff0c;I/O 操作和 UI 渲染等。微任务&#xff1a; Promise 回调、async/await等 微任务通常比宏任务具有更高的优先级。 执…

C#基础(11)函数重载

前言 前面我们已经完成了ref和out补充知识点的学习&#xff0c;以及函数参数相关的学习&#xff0c;今天便再次为函数补充一个知识点&#xff1a;函数重载。 函数重载是指在同一个作用域中&#xff0c;可以有多个同名函数&#xff0c;但参数列表不同。它的发展可以追溯到早期…

【Chrome】开发一个Chrome扩展以及常见问题的解决方案

前言 本文介绍开发chrome扩展很重要的几种操作&#xff0c;如&#xff1a;操作网页dom、发送请求、渲染弹层、不同沙盒环境的通信方式、扩展与网页的通信方式、遇到iframe时的操作等。最终会提供一个简单的案例&#xff0c;其中涵盖了上述操作。 还有一些本人相关文章&#x…

HashMap 详解

哈希表 哈希表又叫散列表&#xff0c;或者映射、字典都是指哈希表&#xff0c;哈希表是通过关键码映射到数组的某个位置来访问的数据结构&#xff0c;实现这个映射的函数就是哈希函数&#xff0c;哈希表结合了数组和链表的优点&#xff0c;查找和插入操作的时间复杂度都是O(1)。…

MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)

目录 讲点一&#xff1a;高级字符串函数 一、简介 二、常见字符串函数 1. CONCAT() 2. SUBSTRING() 3. LENGTH() 4. REPLACE() 5. TRIM() 6. UPPER() 7. LOWER() 8. LEFT() 9. RIGHT() 10. INSTR() 11. LENTH(str) 讲点二&#xff1a;正则表达式 一、简介 二、…

AIGC实战——多模态模型Flamingo

AIGC实战——多模态模型Flamingo 0. 前言1. Flamingo 架构2. 视觉编码器3. Perceiver 重采样器4. 语言模型5. FIamingo 应用小结系列链接 0. 前言 我们已经学习了文本生成图像模型 DALL.E 2&#xff0c;在本节中&#xff0c;我们将探索另一种多模态模型 Flamingo&#xff0c;它…

学习使用在windows系统上安装nodejs以及环境配置图文教程整理

学习使用在windows系统上安装nodejs以及环境配置图文教程整理 Node.js 介绍Node.js 安装1、Node.js下载2、Node.js安装3、Node.js测试4、Node.js安装目录5、Node.js环境变量配置6、配置镜像站&#xff0c;提升速度7、检查镜像站配置8、测试环境变量是否生效9、安装cnpm Node.js…

jwt报错,位置:找不到符号 parseClaimsJws(java.lang.String)

报错显示如图 报错信息为&#xff1a; E:\idea\project\tlias\src\main\java\org\itheima\tlias\utils\JwtUtils.java:36:17 java: 找不到符号 符号: 方法 parseClaimsJws(java.lang.String) 位置: 接口 io.jsonwebtoken.JwtParserBuilder 解决办法 项目使用的是最新…

p12docker 进入容器的命令和拷贝的命令

进入当前正在运行的容器 第一种方式是执行docker exec -it 8d57ffda7a29 /bin/bash这个时候可以根据docker容器的id进入到指定id的容器当中***(这个是比较常用的)*** 老师的笔记 第二种方式是docker attach 8d57ffda7a29 这里还是直接引用老师的笔记吧 从容器内部拷贝文…

HAL库学习梳理——GPIO

笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。有一说一&#xff0c;这个教程自诩为“最佳教程&#xff0c;没有之一~”&#xff0c;确实有点东西。像我这种看视频想睡觉的入门小白来说&#xff0c;感觉捡到宝了。下面对这些课程的应用做一个梳理。 省流&#xff1a; HA…

2-3.Android 存储之存储空间(私有空间、公共空间)

一、内部存储与外部存储 内部存储指位于设备的内部存储空间 外部存储指位于设备的外部存储介质&#xff0c;例如&#xff0c;SD 卡 简单理解&#xff0c;内部存储就是存储在手机自身&#xff0c;外部存储就是存储在手机可以外接的东西&#xff0c;好比电脑的硬盘和 U 盘 二、…

7-1 两个有序链表序列的交集

已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff09;。数字用空格间隔。 输出格式:…

『功能项目』切换职业技能面板【49】

我们打开上一篇48切换职业面板的项目&#xff0c; 本章要做的事情是制作第二职业法师技能面板、第三职业面板并且完成切换 双击打开Canvas进入预制体空间 复制三个技能栏面板 重命名 设置第一技能栏 设置第二职业技能栏 设置第三职业技能栏 修改脚本&#xff1a;ChangeProfess…

TS.38-2

2.4.4 空闲模式 如果设备在接收DISPLAY TEXT STK主动命令时处于空闲模式&#xff0c;设备必须从这种待机模式切换到显示相关弹出窗口。一旦STK命令处理完成&#xff08;例如用户选择了“确定”按钮&#xff09;&#xff0c;设备必须返回到其初始状态。 2.4.5 锁屏 - 手动解锁…

Spark实操学习

Spark学习 一、Spark-Shell编程1. 配置python3(三台服务器都要配置)2. 开始Spark编程3. spark-shell工具 二、Java项目测试1. 新建项目2. Spark-java代码测试 三、Scala项目测试1. 安装scala2. 安装包管理器sbt3. 在编译工具中安装scala工具4. 新建项目5. spark-scala代码测试 …

1.MySQL在Centos 7环境安装

目录 MYSQL在Centos7环境安装MySQL环境配置清理环境检查安装包获取官方yum源安装mysql服务配置my.cnf设置开机启动 MYSQL在Centos7环境安装 MySQL环境配置 安装的时候&#xff0c;用户切换成root。初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使用root进行&#…

【数据结构】排序算法系列——堆排序(附源码+图解)

堆排序 堆排序基于一种常见的**[[二叉树]]结构**&#xff1a;堆 我们前面讲到选择排序&#xff0c;它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解&#xff0c;查找第一个数据需要比较这么多次是正常的&#xff0c;否则无法知道它是最小的记录。 …

THREE.js:网页上的3D世界构建者

THREE.js&#xff1a;网页上的3D世界构建者 前言 THREE.js 是一个强大的基于 JavaScript 的库&#xff0c;它使得在网页上创建和展示三维图形变得异常简单。 通过封装复杂的 WebGL 技术&#xff0c;THREE.js 提供了一套丰富的 API&#xff0c;让开发者能够轻松地构建出令人印…

Pytorch详解-Pytorch核心模块

Pytorch核心模块 一、Pytorch模块结构_pycache__Cincludelibautogradnnoptimutils 二、Lib\site-packages\torchvisiondatasetsmodelsopstransforms 三、核心数据结构——Tensor&#xff08;张量&#xff09;在深度学习中&#xff0c;时间序列数据为什么是三维张量&#xff1f;…

利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;它基于标准 Python 类型提示。FastAPI 支持异步编程&#xff0c;使得开发高性能的 Web 应用变得简单快捷。在本文中&#xff0c;我们将探讨如何使用 FastAPI 结合 Jinj…