Python使用PyAutoGUI模擬鼠標(biāo)鍵盤操作實現(xiàn)消息發(fā)送
前言
在日常辦公中,我們經(jīng)常會遇到一些重復(fù)性的電腦操作,例如打開某個軟件、點擊固定位置、輸入一段文字、按下快捷鍵等。如果這些操作規(guī)則比較固定,就可以考慮使用 Python 進(jìn)行自動化控制。
PyAutoGUI 是一個常用的 Python 自動化操作庫,它可以模擬鼠標(biāo)和鍵盤行為,例如移動鼠標(biāo)、點擊按鈕、輸入文本、按下快捷鍵、截圖以及定位屏幕元素等。它的特點是使用簡單、跨平臺能力較好,適合 Python 初學(xué)者學(xué)習(xí)桌面自動化的基本思路。
本文將以電腦版微信為例,介紹如何使用 PyAutoGUI 模擬鼠標(biāo)和鍵盤操作,實現(xiàn)自動打開微信、定位好友、輸入消息并發(fā)送。
需要注意的是,本文示例僅用于學(xué)習(xí)桌面自動化技術(shù)和處理個人重復(fù)操作。請不要將自動化腳本用于騷擾、群發(fā)垃圾消息或違反平臺規(guī)則的行為。
一、環(huán)境準(zhǔn)備
1. Python 環(huán)境
建議使用 Python 3.8 及以上版本??梢栽诿钚兄袌?zhí)行下面的命令查看 Python 版本:
python --version
如果可以正常輸出版本號,例如 Python 3.11.0,說明 Python 環(huán)境已經(jīng)安裝完成。
2. 安裝 PyAutoGUI
使用 pip 安裝 PyAutoGUI:
pip install pyautogui
如果安裝速度較慢,也可以使用國內(nèi)鏡像源:
pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝完成后,可以在 Python 中測試導(dǎo)入:
import pyautogui
print("PyAutoGUI 安裝成功")如果沒有報錯,說明環(huán)境準(zhǔn)備完成。
二、核心知識點
在編寫完整腳本之前,需要先了解 PyAutoGUI 的幾個基礎(chǔ)用法。
1. 獲取屏幕尺寸
import pyautogui width, height = pyautogui.size() print(width, height)
pyautogui.size() 會返回當(dāng)前屏幕的寬度和高度,單位是像素。
2. 獲取當(dāng)前鼠標(biāo)位置
import pyautogui x, y = pyautogui.position() print(x, y)
這個方法可以獲取鼠標(biāo)當(dāng)前所在位置的坐標(biāo)。后續(xù)自動點擊微信好友、輸入框等位置時,會用到這些坐標(biāo)。
3. 鼠標(biāo)移動
import pyautogui pyautogui.moveTo(500, 300, duration=0.5)
moveTo() 用于把鼠標(biāo)移動到指定坐標(biāo)。duration 表示移動過程持續(xù)的時間,單位是秒。
4. 鼠標(biāo)點擊
import pyautogui pyautogui.click(500, 300)
click() 用于點擊指定坐標(biāo)。如果不傳坐標(biāo),則默認(rèn)點擊當(dāng)前鼠標(biāo)所在位置。
5. 鍵盤輸入
import pyautogui
pyautogui.write("Hello", interval=0.05)
write() 可以模擬鍵盤輸入英文字符。interval 表示每個字符之間的輸入間隔。
不過,pyautogui.write() 對中文輸入支持并不穩(wěn)定。因此,在自動發(fā)送中文消息時,更推薦使用剪貼板方式:先把中文內(nèi)容復(fù)制到剪貼板,再模擬 Ctrl + V 粘貼。
6. 快捷鍵操作
import pyautogui
pyautogui.hotkey("ctrl", "v")
pyautogui.press("enter")
hotkey() 可以模擬組合鍵,press() 可以模擬單個按鍵。
7. 延遲等待
import time time.sleep(1)
桌面自動化腳本經(jīng)常需要等待窗口打開、頁面加載、軟件響應(yīng),因此合理加入延遲非常重要。
三、實戰(zhàn)案例:自動控制電腦版微信發(fā)送消息
本案例的目標(biāo)是:
- 打開電腦版微信。
- 點擊微信搜索框。
- 輸入好友名稱。
- 點擊搜索結(jié)果中的好友。
- 在聊天輸入框中輸入消息。
- 自動發(fā)送消息。
由于不同電腦的屏幕分辨率、微信窗口大小、縮放比例可能不同,腳本中的坐標(biāo)需要根據(jù)自己的電腦進(jìn)行調(diào)整。
四、獲取坐標(biāo)的方法
在運(yùn)行自動化腳本前,建議先獲取幾個關(guān)鍵位置的坐標(biāo):
- 微信搜索框坐標(biāo)
- 搜索結(jié)果中的好友坐標(biāo)
- 聊天輸入框坐標(biāo)
可以使用下面的小工具查看鼠標(biāo)實時坐標(biāo):
import pyautogui
import time
print("請將鼠標(biāo)移動到目標(biāo)位置,按 Ctrl + C 結(jié)束程序")
try:
while True:
x, y = pyautogui.position()
print(f"當(dāng)前鼠標(biāo)坐標(biāo):x={x}, y={y}", end="\r")
time.sleep(0.1)
except KeyboardInterrupt:
print("\n坐標(biāo)獲取結(jié)束")
運(yùn)行程序后,把鼠標(biāo)移動到目標(biāo)位置,就可以看到實時坐標(biāo)。記錄這些坐標(biāo)后,填入后面的完整代碼即可。
五、完整可運(yùn)行代碼示例
下面的代碼使用 PyAutoGUI 自動打開電腦版微信,并向指定好友發(fā)送一條消息。
在運(yùn)行代碼之前,請先根據(jù)自己的電腦修改:
WECHAT_PATHSEARCH_BOX_POSFRIEND_RESULT_POSINPUT_BOX_POSFRIEND_NAMEMESSAGE
import os
import time
import pyautogui
import pyperclip
# =========================
# 1. 基礎(chǔ)配置
# =========================
# 電腦版微信的安裝路徑,需要根據(jù)自己的電腦實際情況修改
# 常見路徑示例:
# 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"
# 需要發(fā)送消息的好友名稱
FRIEND_NAME = "文件傳輸助手"
# 需要發(fā)送的消息內(nèi)容
MESSAGE = "你好,這是一條使用 Python 和 PyAutoGUI 自動發(fā)送的測試消息。"
# 微信搜索框坐標(biāo),需要根據(jù)自己的電腦修改
SEARCH_BOX_POS = (160, 40)
# 搜索結(jié)果中好友的位置坐標(biāo),需要根據(jù)自己的電腦修改
FRIEND_RESULT_POS = (170, 140)
# 聊天輸入框坐標(biāo),需要根據(jù)自己的電腦修改
INPUT_BOX_POS = (520, 720)
# 每次操作后的等待時間,防止軟件響應(yīng)較慢導(dǎo)致操作失敗
WAIT_TIME = 1
# =========================
# 2. 安全設(shè)置
# =========================
# PyAutoGUI 的安全保護(hù)機(jī)制:
# 如果鼠標(biāo)快速移動到屏幕左上角,程序會拋出異常并停止運(yùn)行
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):
"""通過剪貼板粘貼文本,適合輸入中文內(nèi)容。"""
# 將文本復(fù)制到系統(tǒng)剪貼板
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)
# 先清空搜索框中可能存在的內(nèi)容
pyautogui.hotkey("ctrl", "a")
pyautogui.press("backspace")
time.sleep(0.5)
# 輸入好友名稱。中文內(nèi)容使用剪貼板粘貼更穩(wěn)定
paste_text(friend_name)
time.sleep(WAIT_TIME)
# 點擊搜索結(jié)果中的好友
pyautogui.click(*FRIEND_RESULT_POS)
time.sleep(WAIT_TIME)
def send_message(message):
"""在聊天輸入框中輸入并發(fā)送消息。"""
# 點擊聊天輸入框
pyautogui.click(*INPUT_BOX_POS)
time.sleep(0.5)
# 輸入消息內(nèi)容
paste_text(message)
time.sleep(0.5)
# 按下 Enter 發(fā)送消息
pyautogui.press("enter")
def main():
"""主函數(shù):按順序執(zhí)行自動化流程。"""
# 打開電腦版微信
open_wechat()
# 搜索并打開指定好友
select_friend(FRIEND_NAME)
# 輸入并發(fā)送消息
send_message(MESSAGE)
print("消息發(fā)送流程執(zhí)行完成")
if __name__ == "__main__":
main()
六、代碼說明
1. 為什么使用 pyperclip
pyautogui.write() 更適合輸入英文和數(shù)字。如果直接輸入中文,可能會受到輸入法狀態(tài)、系統(tǒng)語言、焦點位置等因素影響。
因此,代碼中使用 pyperclip.copy() 先把中文復(fù)制到剪貼板,再通過 pyautogui.hotkey("ctrl", "v") 粘貼到微信輸入框。這樣輸入中文消息會更加穩(wěn)定。
2. 為什么要加入 time.sleep
桌面軟件不是瞬間響應(yīng)的。例如微信啟動、搜索好友、切換聊天窗口都需要一定時間。如果腳本執(zhí)行太快,可能會出現(xiàn)窗口還沒打開就開始點擊、搜索結(jié)果還沒加載就開始選擇等問題。
所以代碼中在關(guān)鍵步驟后加入了 time.sleep(),用于提高腳本穩(wěn)定性。
3. 為什么需要修改坐標(biāo)
PyAutoGUI 主要基于屏幕坐標(biāo)進(jìn)行操作。不同電腦的屏幕分辨率、縮放比例、微信窗口位置不同,同一個按鈕的坐標(biāo)也會不同。
因此,示例代碼中的坐標(biāo)只是參考值。實際運(yùn)行前,必須先使用坐標(biāo)獲取工具重新確認(rèn)坐標(biāo)。
七、注意事項
1. 坐標(biāo)獲取要準(zhǔn)確
運(yùn)行腳本前,建議先固定微信窗口位置和大小,然后使用坐標(biāo)獲取工具記錄搜索框、好友搜索結(jié)果、聊天輸入框的位置。
如果微信窗口移動了,原來的坐標(biāo)可能就不再準(zhǔn)確。
2. 開啟安全保護(hù)
PyAutoGUI 默認(rèn)支持 Fail-Safe 機(jī)制。當(dāng)程序失控時,可以把鼠標(biāo)快速移動到屏幕左上角,腳本會自動拋出異常并停止。
代碼中建議保留:
pyautogui.FAILSAFE = True
不要隨意關(guān)閉這個安全設(shè)置。
3. 避免誤操作
在執(zhí)行自動化腳本前,應(yīng)關(guān)閉不相關(guān)窗口,確保微信處于可操作狀態(tài)。否則腳本可能點擊到其他窗口,造成誤操作。
建議先把消息發(fā)送給“文件傳輸助手”進(jìn)行測試,確認(rèn)流程穩(wěn)定后,再用于其他個人場景。
4. 不要用于批量騷擾
自動化工具應(yīng)當(dāng)用于提高個人效率,而不是用于批量發(fā)送廣告、騷擾他人或規(guī)避平臺規(guī)則。使用自動化腳本時,應(yīng)遵守軟件平臺規(guī)則和相關(guān)法律法規(guī)。
5. 確認(rèn)微信路徑
如果運(yùn)行代碼時報錯“未找到微信程序”,說明 WECHAT_PATH 配置不正確??梢杂益I微信快捷方式,查看目標(biāo)路徑,然后復(fù)制到代碼中。
八、總結(jié)
本文介紹了如何使用 Python 的 PyAutoGUI 庫模擬鼠標(biāo)和鍵盤操作,并以電腦版微信為例,實現(xiàn)了自動打開軟件、搜索好友、輸入消息和發(fā)送消息的完整流程。
通過這個案例可以看到,PyAutoGUI 的核心思路并不復(fù)雜:先確定操作位置,再按照人工操作順序編寫腳本。對于一些規(guī)則固定、重復(fù)性較高的桌面操作,PyAutoGUI 是一個非常實用的自動化工具。
不過,基于坐標(biāo)的自動化方式對窗口位置和屏幕環(huán)境比較敏感。在實際使用中,應(yīng)當(dāng)注意坐標(biāo)準(zhǔn)確性、操作延遲和安全保護(hù),避免腳本誤操作。
以上就是Python使用PyAutoGUI模擬鼠標(biāo)鍵盤操作實現(xiàn)消息發(fā)送的詳細(xì)內(nèi)容,更多關(guān)于Python PyAutoGUI模擬鼠標(biāo)鍵盤操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python OOP類中的幾種函數(shù)或方法總結(jié)
今天小編就為大家分享一篇關(guān)于Python OOP類中的幾種函數(shù)或方法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Python內(nèi)置函數(shù)issubclass()的具體使用
issubclass()是Python中一個非常有用的內(nèi)置函數(shù),它提供了一種簡單的方式來檢查類的繼承關(guān)系,本文主要介紹了Python內(nèi)置函數(shù)issubclass()的具體使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2007-03-03
Python實現(xiàn)結(jié)構(gòu)化日志系統(tǒng)的完整方案和最佳實踐
在現(xiàn)代軟件系統(tǒng)中,日志不僅是調(diào)試和問題排查的工具,更是系統(tǒng)可觀測性的核心組成部分,本文將深入探討結(jié)構(gòu)化日志系統(tǒng)的設(shè)計原理、實現(xiàn)方法和最佳實踐,提供完整的Python實現(xiàn)方案,希望對大家有所幫助2025-12-12
Python實現(xiàn)單例模式的五種寫法總結(jié)
單例模式(Singleton Pattern) 是一種常用的軟件設(shè)計模式,該模式的主要目的是確保某一個類只有一個實例存在。本文為大家整理了五種Python實現(xiàn)單例模式的寫法,需要的可以參考一下2022-08-08
Python PIL讀取的圖像發(fā)生自動旋轉(zhuǎn)的實現(xiàn)方法
這篇文章主要介紹了Python PIL讀取的圖像發(fā)生自動旋轉(zhuǎn)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
ubuntu 18.04 安裝opencv3.4.5的教程(圖解)
這篇文章主要介紹了ubuntu 18.04 安裝opencv3.4.5的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11
基于Python進(jìn)行Word文檔模板自動化處理操作完整指南
在日常辦公和文檔處理工作中,我們經(jīng)常需要根據(jù)模板生成大量相似結(jié)構(gòu)的Word文檔,本文將深入介紹如何實現(xiàn)Word文檔模板的自動化處理,從占位符提取到智能填充的完整流程,希望對大家有所幫助2025-10-10

