Python实现微信自动化发送信息

2023-05-16

需求:利用PC端微信实现自动向文件传输助手,好友等发送信息

库说明


psutil: 获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息,用于获取进程ID
pywinauto:自动化Microsoft Windows GUI的python模块,用于检索微信窗口的控件位置(https://www.kancloud.cn/gnefnuy/pywinauto_doc)       
pyautogui:PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作用于控制键盘热键
pyinstaller -F xxx.py  最后用打包exe
  

知识点1:如何获取进程的ID?

可使用psutil 库来查看所有进程的名字,匹配进程名字返回进程ID,,进程名字ID查看工具:inspect.exe:

「inspect.exe」https://www.aliyundrive.com/s/JDSBosz7CfR 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

import psutil

# 获取进程id
def get_pid(processName):
    for proc in psutil.process_iter():
        try:
            if (proc.name() == processName):
                print(proc.name())
                print(str(proc.pid))
                return proc.pid
        except psutil.NoSuchProcess:
            pass
    return -1

知识点2:打开微信可以使用快捷键:ctrl+alt+w

# 打开微信的快捷键
pyautogui.hotkey('ctrl', 'alt', 'w')

 知识点3:利用进程ID实例化

# 利用进程ID初始化一下实例
app = Application(backend='uia').connect(process=procId)
# print(app.window())
# 检索微信窗口
main_Win = app.window(class_name='WeChatMainWndForPC')
# 打印所有的窗口控件信息
# main_Win.print_control_identifiers()
# 最大化
main_Win.maximize()

知识点4:微信中“通信录”,“搜索”等功能实现

首先定位“通讯录”元素:main_Win.chind_window()   需要二个参数:title和control_type 

点击该元素click_input()

# 切换到通讯录
btn1 = main_Win.child_window(title="通讯录", control_type="Button").wrapper_object()
# main_Win.Properties.Button3.click()
btn1.draw_outline(colour='red')
btn1.click_input()

 知识点5: 点击微信的搜索功能

# 搜索联系人--文件传输助手
searchKey = ‘张三’
searchEdit = main_Win.child_window(title="搜索", control_type="Edit").wrapper_object()
searchEdit.draw_outline(colour='red')
searchEdit.click_input()
searchEdit.type_keys(searchKey)
sleep(2)

知识点6:搜索后处理

# 选择搜索出的第一个
try:
    selectItem = main_Win.child_window(title=searchKey, control_type="ListItem").wrapper_object()
    selectItem.click_input()
except:
    print("对话框已打开")
# 清空对话框
pyautogui.hotkey('ctrl', 'a')
pyautogui.hotkey('backspace')

 知识点7:发送消息

# 发送消息
sendMsg = ‘How are you?’
inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
inputMsg.click_input()
inputMsg.type_keys(sendMsg, with_spaces=True)

# 发送
# sendbtn = main_Win["sendBtn"]
# sendbtn.draw_outline(colour='red')
# sendbtn.click_input()
# 回车发送
pyautogui.hotkey('enter')
print(xlsbody[0][i] + ":发送完成")

知识点8:置顶与取消置顶

# 置顶
top = main_Win.child_window(title="置顶", control_type="Button").wrapper_object()
# 定位到置顶元素,画个红色的方框醒目
top.draw_outline(colour='red')
top.click_input()

# 取消置顶
notop = main_Win.child_window(title="取消置顶", control_type="Button").wrapper_object()
notop.draw_outline(colour='red')
notop.click_input()

 参考代码如下【学习使用】

# 改变标准输出的默认编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')


# 获取进程id
def get_pid(processName):
    for proc in psutil.process_iter():
        try:
            if (proc.name() == processName):
                print(proc.name())
                print(str(proc.pid))
                return proc.pid
        except psutil.NoSuchProcess:
            pass
    return -1


# 获取参数
def get_xls():
    # 打开参数表
    print("获取参数中")
    wb = openpyxl.load_workbook("参数.xlsx")
    wscs = wb["参数"]
    groupname = wscs['B1'].value.split(',')  # 转换为列表组名
    groupcoount = len(groupname)
    message = wscs['B2'].value
    atall = wscs['B3'].value
    print(groupname)
    print("共计:" + str(groupcoount) + "组")
    print("发送内容:" + message)
    print("是否@所有人:" + atall)
    return groupname, message, atall, groupcoount


# 获取主窗口
def get_body(procId, xlsbody):
    # 打开微信的快捷键
    pyautogui.hotkey('ctrl', 'alt', 'w')
    # 利用进程ID初始化一下实例
    app = Application(backend='uia').connect(process=procId)
    # print(app.window())
    # 检索微信窗口
    main_Win = app.window(class_name='WeChatMainWndForPC')
    # 打印所有的窗口控件信息
    # main_Win.print_control_identifiers()
    # 最大化
    main_Win.maximize()
    # 置顶
    top = main_Win.child_window(title="置顶", control_type="Button").wrapper_object()
    top.draw_outline(colour='red')
    top.click_input()

    print(main_Win.is_dialog)
    for i in range(xlsbody[3]):
        # 切换到通讯录
        btn1 = main_Win.child_window(title="通讯录", control_type="Button").wrapper_object()
        # main_Win.Properties.Button3.click()
        btn1.draw_outline(colour='red')
        btn1.click_input()
        # 搜索联系人--文件传输助手
        # print(i)
        searchKey = xlsbody[0][i]
        searchEdit = main_Win.child_window(title="搜索", control_type="Edit").wrapper_object()
        searchEdit.draw_outline(colour='red')
        searchEdit.click_input()
        searchEdit.type_keys(searchKey)
        sleep(2)
        # 选择搜索出的第一个
        try:
            selectItem = main_Win.child_window(title=searchKey, control_type="ListItem").wrapper_object()
            selectItem.click_input()
        except:
            print("对话框已打开")
        # 清空对话框
        pyautogui.hotkey('ctrl', 'a')
        pyautogui.hotkey('backspace')
        # if (xlsbody[2] == "是"):
        #     # @所有人
        #     sendMsg = "@"
        #     inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
        #     inputMsg.click_input()
        #     inputMsg.type_keys(sendMsg, with_spaces=True)
        #     allpeople = main_Win.child_window(title="所有人", control_type="Text").wrapper_object()
        #     allpeople.draw_outline(colour='red')
        #     allpeople.click_input()

        # 发送消息
        sendMsg = xlsbody[1]
        inputMsg = main_Win.child_window(title="输入", control_type="Edit").wrapper_object()
        inputMsg.click_input()
        inputMsg.type_keys(sendMsg, with_spaces=True)

        # 发送
        # sendbtn = main_Win["sendBtn"]
        # sendbtn.draw_outline(colour='red')
        # sendbtn.click_input()
        # 回车发送
        pyautogui.hotkey('enter')
        print(xlsbody[0][i] + ":发送完成")
    # 取消置顶
    notop = main_Win.child_window(title="取消置顶", control_type="Button").wrapper_object()
    notop.draw_outline(colour='red')
    notop.click_input()


if __name__ == '__main__':
    procId = get_pid("WeChat.exe")
    if (procId == -1):
        print("微信未运行")
    else:
        get_body(procId, get_xls())

 说明:学习视频来源pywinauto实现微信自动发送消息的小实践_哔哩哔哩_bilibili

感谢UP主分享。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python实现微信自动化发送信息 的相关文章

  • 利用python实现本地文件上传到sftp

    实现功能 xff1a 利用python自动连接sftp xff0c 并实现本地文件 xff08 文件夹 xff09 自动上传到远程sftp服务中指定路径下 xff0c 且保持本地目录结构 系统环境 xff1a centos7 python版
  • Qt在不同平台上的安装

    Qt在不同平台上的安装 来源 愿码 ChainDesk CN 内容编辑愿码Slogan 连接每个程序员的故事网站 http chaindesk cn愿码愿景 打造全学科IT系统免费课程 xff0c 助力小白用户 初级工程师0成本免费系统学习
  • linux 查看当前文件夹位置

    Linux中查看当前所处的目录位置可以使用pwd命令 1 命令格式pwd 选项 2 命令功能查看 当前工作目录 的完整路径3 常用参数一般情况下不带任何参数如果目录是链接时 xff1a 格式 xff1a pwd P 显示出实际路径 xff0
  • chrome中任意修改网页内容

    作用 xff1a 1 去除AdBlock所不能完全清楚的广告 2 修改网页 步骤 xff1a 1 F12 2 Console控制台选项卡 3 命令输入框输入 document body contentEditable 61 34 true
  • java stream流

    https blog 51cto com u 15067266 4338459
  • CentOS7 无法更改resolve.conf

    span class token function cat span etc sysconfig network scripts ifcfg ensXX span class token builtin class name echo sp
  • slack的RSS

    feed list 要列出这个频道已订阅的订阅源 feed span class token builtin class name help span 订阅帮助 feed http kotaku com vip xml 要订阅这个频道中的订
  • 矩阵在pycharm中全显示(不自动换行)

    加上下面这句代码 xff0c 输出时打印不换行 import numpy as np np set printoptions linewidth 61 400 强制输出小数方法 xff1a suppress 61 True 强制类型转换 d
  • python的print输出txt

    方法一 xff1a import sys newfile 61 39 C VisualSTUDIO climbdouban soup txt 39 data 61 open newfile 39 w 39 encoding 61 34 ut
  • linux返回上级目录

    cd 返回上一级目录 cd 返回上两级目录 cd或cd 返回home目录 cd 目录名 返回指定目录
  • Debian7虚拟机安装

    一 虚拟机的创建 Debian7 下载地址 1 创建新的虚拟机 主页点击创建新的虚拟机 xff0c 打开虚拟机向导 xff0c 选择自定义 2 选择虚拟机硬件兼容性 默认就行 xff0c 点击下一步 3 安装客户机操作系统 这里选择稍后安装
  • windows环境UDP发送free-d协议数据,全网独家!

    话不多说上代码 xff1a span class token macro property span class token directive keyword include span span class token string lt
  • python之zmail的邮件发送

    自动化测试 python基础之邮件发送 文章目录 自动化测试 python基础之邮件发送一 使用步骤二 使用步骤邮件发送使用介绍发送邮件功能的封装授权码获取 总结 一 使用步骤 这里使用的是python 43 zmail进行邮件的发送 wi
  • opencv中自适应阈值(adaptiveThreshold()函数)介绍

    1 自适应阈值简介 自适应阈值 xff08 adaptiveThreshold xff0c 用于二值化处理图像 xff0c 对于对比大的图像有较好效果 xff0c 相对于opencv中固定阈值化操作 xff08 threshold xff0
  • ubuntu安装nvidia显卡驱动后黑屏,进不去Ubuntu系统

    我在Ubuntu16 04上安装cuda时选择了电脑建议安装的430显卡驱动 xff0c 然后重启电脑后黑屏 xff0c 进不去字符界面 xff0c 就像键盘和主机断开联系了 xff0c 网上试了很多方法都没用 xff0c 最后是在Ubun
  • win10修改wsl2配置以降低vmmem进程内存占用过高问题

    文章目录 wsl常用命令修改 wslconfig配置文件 wslconfig文件路径 wslconfig文件内容 检查配置生效与否 查看任务管理器时发现vmmem进程占用内存过高 查阅相关文档后 xff0c 可以通过对wsl的一些默认配置做
  • Week15实验

    A题 xff1a Q 老师有 N 个学生 xff0c 每个学生都有各自独立的编号 xff0c 且编号范围在 1 N 之间 这一天 xff0c 所有学生都在不同的时间进入教室 Q 老师记录了当编号为 i 的学生进入教室时 xff0c 教室中共
  • 树莓派学习笔记四:树莓派安装VSCode

    首先 xff0c 在Windows浏览器中打开链接 xff1a https code visualstudio com Download xff0c 选择适合树莓派系统的软件版本 xff0c 注意树莓派为32位的系统 xff0c 应当选择下
  • 编译opencv错误

    编译opencv错误 1 CMake Warning at cmake OpenCVDownload cmake 202 message FFMPEG Download failed 7 Couldn t connect to server
  • 有两个线程,一个模拟数鸭子(循环输出200个数),一个模拟下雨(循环输出100个数), 在数到第50只鸭子的时候,开始下雨,下雨的时候 不能数鸭子,雨下完,再接着数鸭子

    题目有两个线程 一个模拟数鸭子 循环输出200个数 一个模拟下雨 循环输出100个数 在数到第50只鸭子的时候 开始下雨 下雨的时候不能数鸭子 雨下完 再接着数鸭子 遇到问题 用join可以 但是用 CountDownLatch latch

随机推荐

  • go调用python3:go-python3包的使用

    参考资料 xff1a https zhuanlan zhihu com p 150253406 https blog csdn net skyztttt article details 8115086 https poweruser blo
  • week8 C - 班长竞选(强联通分量,缩点)

    一 题目描述 大学班级选班长 xff0c N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适 xff0c 意见具有传递性 xff0c 即 A 认为 B 合适 xff0c B 认为 C 合适 xff0c 则 A 也认为 C
  • QT等待动态图gif加载透明背景lable

    h QLabel span class token operator span waiting span class token punctuation span QMovie span class token operator span
  • Week12 作业 B - 必做题(三维空间迷宫)

    一 题目描述 zjm被困在一个三维的空间中 现在要寻找最短路径逃生 xff01 空间由立方体单位构成 zjm每次向上下前后左右移动一个单位需要一分钟 xff0c 且zjm不能对角线移动 空间的四周封闭 zjm的目标是走到空间的出口 是否存在
  • Week13 作业 A - TT 的神秘任务1(必做)

    一 题目描述 这一天 xff0c TT 遇到了一个神秘人 神秘人给了两个数字 xff0c 分别表示 n 和 k xff0c 并要求 TT 给出 k 个奇偶性相同的正整数 xff0c 使得其和等于 n 例如 n 61 10 xff0c k 6
  • CentOS 7:使用技巧

    写在前面 主要是记录一下CentOS 7的一些使用技巧 一 添加拼音输入法 默认的输入法只有英文的输入 xff0c 需要自行添加中文的输入法 点击左上角的Applications xff0c 选择System Tools中的Settings
  • ubuntu安装php7.3

    php7 3的安装 按顺序输入命令 sudo apt get install software properties common python software propertiessudo add apt repository ppa
  • 多数据库数据列表分页

    多数据库查询数据列表分页 概述 xff1a 在后台管理系统中 列表数据的展示有可能来自多个数据源 xff0c 列表页需要支持分页 这边有两种方案 多个数据源的数据定时同步到某一个数据源A中 xff0c 列表显示的数据就从数据源A中进行分页查
  • ubuntu安装postman

    ubuntu安装postman postman官网下载压缩包点击此处 下载完成之后 把压缩包到桌面路径上 解压文件之后 通过命令 xff1a span class token punctuation span span class toke
  • mac docker + nginx + php

    链接地址 https www phpbloger com article 505 html
  • docker nginx 多个php版本

    链接 https cloud tencent com developer article 1554052
  • docke+nginx+php

    docker run name nginx p 8001 8001 p 8002 8002 v docker nginx www www v docker nginx conf nginx conf etc nginx conf d v d
  • 一个基于layui的简单组件,基于jquery的简单组件,layMin有简洁的提示框和图片预览、及加载效果等

    layMin扩展组件 一个基于layui的简单组件 xff0c 基于jquery的简单组件 xff0c layMin有简洁的提示框和图片预览 及加载效果等 xff1b 支持作为layui的组件引入 xff0c 也支持单独引入layMin c
  • Linux嵌入式终端的脚本,检测有没插网线

    span class token shebang important bin sh span span class token assign left variable NETWORK span span class token opera
  • Ubuntu20.04系统下进行复制粘贴文件显示没有权限的解决办法

    Ctrl 43 alt 43 T打开终端输入命令sudo nautilus然后就可以打开一个不需要管理员权限的界面 xff0c 可以直接复制粘贴 亲测有效 xff01 xff01 借鉴于博客 xff1a https blog csdn ne
  • Ubuntu20.04安装anaconda3成功以后,找不到conda命令

    原因 xff1a 环境设置没有更新 解决办法 xff1a 注意路径 xff01 找到anaconda安装完成后生成的文件夹位置 相应修改 xff0c 如下图我的位置就在主目录下 xff1a 因此 xff0c 我执行的命令为 xff1a ec
  • ubuntu16.04 opencv打开摄像头失败

    ubuntu16 04 opencv打开摄像头失败 按照opencv检测AruCo标记教程 xff0c 运行程序时打开摄像头失败 xff0c 使用的相机是Intel RealSense D435 发生问题的代码如下 span class t
  • 计算机视觉学习笔记&思维导图(一起轻松学习计算机视觉与图像处理)

    文章目录 前言一 思维导图二 笔记勘误 前言 本文为计算机视觉课程期末复习的笔记 xff0c 编者耗时近半个月整理而成 内容依据课程的学习资料以及查阅网上一些资料梳理得到的 xff0c 编者希望在应付考试的同时能够将计算机视觉的知识体系建立
  • python发送邮件

    text 61 39 亲爱的Jerry 我是你的邻居Tom xff01 5 1邀请你来参加劳动 xff01 CALL ME xff1a 123 64 qq com 39 from email mime text import MIMETex
  • Python实现微信自动化发送信息

    需求 xff1a 利用PC端微信实现自动向文件传输助手 xff0c 好友等发送信息 库说明 psutil 获取系统运行的进程和系统利用率 xff08 包括CPU 内存 磁盘 网络等 xff09 信息 xff0c 用于获取进程ID pywin