Python使用PyAutoGUI模拟鼠标键盘操作实现消息发送

 更新时间:2026年04月21日 09:05:39   作者:yuanpan  
本文介绍了如何使用Python的PyAutoGUI库模拟鼠标和键盘操作,以微信为例,自动打开软件、搜索好友、输入消息和发送消息,通过本文,读者可以了解PyAutoGUI的核心思路,需要的朋友可以参考下

前言

在日常办公中,我们经常会遇到一些重复性的电脑操作,例如打开某个软件、点击固定位置、输入一段文字、按下快捷键等。如果这些操作规则比较固定,就可以考虑使用 Python 进行自动化控制。

PyAutoGUI 是一个常用的 Python 自动化操作库,它可以模拟鼠标和键盘行为,例如移动鼠标、点击按钮、输入文本、按下快捷键、截图以及定位屏幕元素等。它的特点是使用简单、跨平台能力较好,适合 Python 初学者学习桌面自动化的基本思路。

本文将以电脑版微信为例,介绍如何使用 PyAutoGUI 模拟鼠标和键盘操作,实现自动打开微信、定位好友、输入消息并发送。

需要注意的是,本文示例仅用于学习桌面自动化技术和处理个人重复操作。请不要将自动化脚本用于骚扰、群发垃圾消息或违反平台规则的行为。

一、环境准备

1. Python 环境

建议使用 Python 3.8 及以上版本。可以在命令行中执行下面的命令查看 Python 版本:

python --version

如果可以正常输出版本号,例如 Python 3.11.0,说明 Python 环境已经安装完成。

2. 安装 PyAutoGUI

使用 pip 安装 PyAutoGUI:

pip install pyautogui

如果安装速度较慢,也可以使用国内镜像源:

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

安装完成后,可以在 Python 中测试导入:

import pyautogui
print("PyAutoGUI 安装成功")

如果没有报错,说明环境准备完成。

二、核心知识点

在编写完整脚本之前,需要先了解 PyAutoGUI 的几个基础用法。

1. 获取屏幕尺寸

import pyautogui

width, height = pyautogui.size()
print(width, height)

pyautogui.size() 会返回当前屏幕的宽度和高度,单位是像素。

2. 获取当前鼠标位置

import pyautogui

x, y = pyautogui.position()
print(x, y)

这个方法可以获取鼠标当前所在位置的坐标。后续自动点击微信好友、输入框等位置时,会用到这些坐标。

3. 鼠标移动

import pyautogui

pyautogui.moveTo(500, 300, duration=0.5)

moveTo() 用于把鼠标移动到指定坐标。duration 表示移动过程持续的时间,单位是秒。

4. 鼠标点击

import pyautogui

pyautogui.click(500, 300)

click() 用于点击指定坐标。如果不传坐标,则默认点击当前鼠标所在位置。

5. 键盘输入

import pyautogui

pyautogui.write("Hello", interval=0.05)

write() 可以模拟键盘输入英文字符。interval 表示每个字符之间的输入间隔。

不过,pyautogui.write() 对中文输入支持并不稳定。因此,在自动发送中文消息时,更推荐使用剪贴板方式:先把中文内容复制到剪贴板,再模拟 Ctrl + V 粘贴。

6. 快捷键操作

import pyautogui

pyautogui.hotkey("ctrl", "v")
pyautogui.press("enter")

hotkey() 可以模拟组合键,press() 可以模拟单个按键。

7. 延迟等待

import time

time.sleep(1)

桌面自动化脚本经常需要等待窗口打开、页面加载、软件响应,因此合理加入延迟非常重要。

三、实战案例:自动控制电脑版微信发送消息

本案例的目标是:

  1. 打开电脑版微信。
  2. 点击微信搜索框。
  3. 输入好友名称。
  4. 点击搜索结果中的好友。
  5. 在聊天输入框中输入消息。
  6. 自动发送消息。

由于不同电脑的屏幕分辨率、微信窗口大小、缩放比例可能不同,脚本中的坐标需要根据自己的电脑进行调整。

四、获取坐标的方法

在运行自动化脚本前,建议先获取几个关键位置的坐标:

  • 微信搜索框坐标
  • 搜索结果中的好友坐标
  • 聊天输入框坐标

可以使用下面的小工具查看鼠标实时坐标:

import pyautogui
import time

print("请将鼠标移动到目标位置,按 Ctrl + C 结束程序")

try:
    while True:
        x, y = pyautogui.position()
        print(f"当前鼠标坐标:x={x}, y={y}", end="\r")
        time.sleep(0.1)
except KeyboardInterrupt:
    print("\n坐标获取结束")

运行程序后,把鼠标移动到目标位置,就可以看到实时坐标。记录这些坐标后,填入后面的完整代码即可。

五、完整可运行代码示例

下面的代码使用 PyAutoGUI 自动打开电脑版微信,并向指定好友发送一条消息。

在运行代码之前,请先根据自己的电脑修改:

  • WECHAT_PATH
  • SEARCH_BOX_POS
  • FRIEND_RESULT_POS
  • INPUT_BOX_POS
  • FRIEND_NAME
  • MESSAGE
import os
import time
import pyautogui
import pyperclip


# =========================
# 1. 基础配置
# =========================

# 电脑版微信的安装路径,需要根据自己的电脑实际情况修改
# 常见路径示例:
# C:\Program Files\Tencent\WeChat\WeChat.exe
# C:\Program Files (x86)\Tencent\WeChat\WeChat.exe
WECHAT_PATH = r"C:\Program Files\Tencent\WeChat\WeChat.exe"

# 需要发送消息的好友名称
FRIEND_NAME = "文件传输助手"

# 需要发送的消息内容
MESSAGE = "你好,这是一条使用 Python 和 PyAutoGUI 自动发送的测试消息。"

# 微信搜索框坐标,需要根据自己的电脑修改
SEARCH_BOX_POS = (160, 40)

# 搜索结果中好友的位置坐标,需要根据自己的电脑修改
FRIEND_RESULT_POS = (170, 140)

# 聊天输入框坐标,需要根据自己的电脑修改
INPUT_BOX_POS = (520, 720)

# 每次操作后的等待时间,防止软件响应较慢导致操作失败
WAIT_TIME = 1


# =========================
# 2. 安全设置
# =========================

# PyAutoGUI 的安全保护机制:
# 如果鼠标快速移动到屏幕左上角,程序会抛出异常并停止运行
pyautogui.FAILSAFE = True

# 每个 PyAutoGUI 操作之间自动暂停 0.2 秒
pyautogui.PAUSE = 0.2


def open_wechat():
    """打开电脑版微信。"""

    # 判断微信程序是否存在
    if not os.path.exists(WECHAT_PATH):
        raise FileNotFoundError(f"未找到微信程序,请检查路径是否正确:{WECHAT_PATH}")

    # 使用 os.startfile 打开 Windows 程序
    os.startfile(WECHAT_PATH)

    # 等待微信窗口启动
    time.sleep(3)


def paste_text(text):
    """通过剪贴板粘贴文本,适合输入中文内容。"""

    # 将文本复制到系统剪贴板
    pyperclip.copy(text)

    # 模拟 Ctrl + V 粘贴
    pyautogui.hotkey("ctrl", "v")

    # 等待文本粘贴完成
    time.sleep(0.5)


def select_friend(friend_name):
    """通过搜索框定位并打开指定好友聊天窗口。"""

    # 点击微信搜索框
    pyautogui.click(*SEARCH_BOX_POS)
    time.sleep(WAIT_TIME)

    # 先清空搜索框中可能存在的内容
    pyautogui.hotkey("ctrl", "a")
    pyautogui.press("backspace")
    time.sleep(0.5)

    # 输入好友名称。中文内容使用剪贴板粘贴更稳定
    paste_text(friend_name)
    time.sleep(WAIT_TIME)

    # 点击搜索结果中的好友
    pyautogui.click(*FRIEND_RESULT_POS)
    time.sleep(WAIT_TIME)


def send_message(message):
    """在聊天输入框中输入并发送消息。"""

    # 点击聊天输入框
    pyautogui.click(*INPUT_BOX_POS)
    time.sleep(0.5)

    # 输入消息内容
    paste_text(message)
    time.sleep(0.5)

    # 按下 Enter 发送消息
    pyautogui.press("enter")


def main():
    """主函数:按顺序执行自动化流程。"""

    # 打开电脑版微信
    open_wechat()

    # 搜索并打开指定好友
    select_friend(FRIEND_NAME)

    # 输入并发送消息
    send_message(MESSAGE)

    print("消息发送流程执行完成")


if __name__ == "__main__":
    main()

六、代码说明

1. 为什么使用 pyperclip

pyautogui.write() 更适合输入英文和数字。如果直接输入中文,可能会受到输入法状态、系统语言、焦点位置等因素影响。

因此,代码中使用 pyperclip.copy() 先把中文复制到剪贴板,再通过 pyautogui.hotkey("ctrl", "v") 粘贴到微信输入框。这样输入中文消息会更加稳定。

2. 为什么要加入 time.sleep

桌面软件不是瞬间响应的。例如微信启动、搜索好友、切换聊天窗口都需要一定时间。如果脚本执行太快,可能会出现窗口还没打开就开始点击、搜索结果还没加载就开始选择等问题。

所以代码中在关键步骤后加入了 time.sleep(),用于提高脚本稳定性。

3. 为什么需要修改坐标

PyAutoGUI 主要基于屏幕坐标进行操作。不同电脑的屏幕分辨率、缩放比例、微信窗口位置不同,同一个按钮的坐标也会不同。

因此,示例代码中的坐标只是参考值。实际运行前,必须先使用坐标获取工具重新确认坐标。

七、注意事项

1. 坐标获取要准确

运行脚本前,建议先固定微信窗口位置和大小,然后使用坐标获取工具记录搜索框、好友搜索结果、聊天输入框的位置。

如果微信窗口移动了,原来的坐标可能就不再准确。

2. 开启安全保护

PyAutoGUI 默认支持 Fail-Safe 机制。当程序失控时,可以把鼠标快速移动到屏幕左上角,脚本会自动抛出异常并停止。

代码中建议保留:

pyautogui.FAILSAFE = True

不要随意关闭这个安全设置。

3. 避免误操作

在执行自动化脚本前,应关闭不相关窗口,确保微信处于可操作状态。否则脚本可能点击到其他窗口,造成误操作。

建议先把消息发送给“文件传输助手”进行测试,确认流程稳定后,再用于其他个人场景。

4. 不要用于批量骚扰

自动化工具应当用于提高个人效率,而不是用于批量发送广告、骚扰他人或规避平台规则。使用自动化脚本时,应遵守软件平台规则和相关法律法规。

5. 确认微信路径

如果运行代码时报错“未找到微信程序”,说明 WECHAT_PATH 配置不正确。可以右键微信快捷方式,查看目标路径,然后复制到代码中。

八、总结

本文介绍了如何使用 Python 的 PyAutoGUI 库模拟鼠标和键盘操作,并以电脑版微信为例,实现了自动打开软件、搜索好友、输入消息和发送消息的完整流程。

通过这个案例可以看到,PyAutoGUI 的核心思路并不复杂:先确定操作位置,再按照人工操作顺序编写脚本。对于一些规则固定、重复性较高的桌面操作,PyAutoGUI 是一个非常实用的自动化工具。

不过,基于坐标的自动化方式对窗口位置和屏幕环境比较敏感。在实际使用中,应当注意坐标准确性、操作延迟和安全保护,避免脚本误操作。

以上就是Python使用PyAutoGUI模拟鼠标键盘操作实现消息发送的详细内容,更多关于Python PyAutoGUI模拟鼠标键盘操作的资料请关注脚本之家其它相关文章!

相关文章

  • Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能

    这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归、确保参数传递的正确,需要的朋友可以参考下
    2015-03-03
  • Python中的global与nonlocal关键字详解

    Python中的global与nonlocal关键字详解

    在Python编程中变量作用域是一个非常重要的概念,global和nonlocal关键字就能派上用场了,本文将详细介绍这两个关键字的用法、区别及适用场景,帮助大家彻底弄懂global与nonlocal关键字
    2025-07-07
  • Python中 Lambda表达式全面解析

    Python中 Lambda表达式全面解析

    Lambda是一种匿名函数,当我们需要重复调用某一函数,又不想写那么多代码时可以使用lambda表达式来代替。本文给大家介绍Python中 Lambda表达式,需要的朋友一起学习吧
    2016-11-11
  • Python基础之数据类型知识汇总

    Python基础之数据类型知识汇总

    今天带大家复习一下Python基础知识,文中对数据类型相关知识做了详细的汇总,对刚入门python的小伙伴很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • Python在线编译器Lightly轻松实现贪吃蛇游戏

    Python在线编译器Lightly轻松实现贪吃蛇游戏

    今天我将带领大家使用Python的Pygame库在Lightly在线编译器中实现一个经典的贪吃蛇游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-09-09
  • 详解在Python中创建条形图追赶动画

    详解在Python中创建条形图追赶动画

    动画是使可视化更具吸引力和用户吸引力的好方法。它帮助我们以有意义的方式展示数据可视化。Matplotlib是一个非常流行的数据可视化库,通常用于数据的图形表示以及使用内置函数的动画。本文将用Matplotlib绘制条形图追赶动画,需要的可以参考一下
    2022-03-03
  • Python中比较特别的除法运算和幂运算介绍

    Python中比较特别的除法运算和幂运算介绍

    这篇文章主要介绍了Python中比较特别的除法运算和幂运算介绍,“/”这个是除法运算,那么这个“//”呢?“*”这个是乘法运算,那么这个“**”呢?本文就讲解这些运算的不同,需要的朋友可以参考下
    2015-04-04
  • Python字典取键、值对的方法步骤

    Python字典取键、值对的方法步骤

    这篇文章主要介绍了Python字典取键、值对的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Python中将列表转化为链表的方法详解

    Python中将列表转化为链表的方法详解

    这篇文章主要介绍了Python中将列表转化为链表的方法详解,本文的主要问题是输入一组数,将其按照顺序添加到链表中,文中提供了解决思路与部分实现代码,需要的朋友可以参考下
    2023-11-11
  • sklearn的predict_proba使用说明

    sklearn的predict_proba使用说明

    这篇文章主要介绍了sklearn的predict_proba使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论