Python PyAutoGUI超詳細(xì)實(shí)戰(zhàn)教程 附完整教學(xué)代碼
本文將從環(huán)境搭建、基礎(chǔ)配置、鼠標(biāo)自動(dòng)化、鍵盤自動(dòng)化、屏幕操作、高級(jí)功能、實(shí)戰(zhàn)案例七個(gè)維度展開,搭配可直接運(yùn)行的教學(xué)代碼,覆蓋新手入門到實(shí)戰(zhàn)應(yīng)用的全部核心知識(shí)點(diǎn)。
一、環(huán)境搭建:安裝 PyAutoGUI 及依賴
PyAutoGUI 依賴少量第三方庫(kù)(如 PIL/Pillow 用于圖像處理、PyScreeze 用于屏幕截圖、PyTweening 用于鼠標(biāo)緩動(dòng)),安裝時(shí)會(huì)自動(dòng)關(guān)聯(lián)下載,直接通過(guò)pip即可完成安裝,支持 Windows、Mac、Linux 三大系統(tǒng)。
1. 核心安裝命令
打開終端 / 命令提示符,執(zhí)行以下命令(建議使用 Python3.7 + 版本,兼容性最佳):
# 基礎(chǔ)安裝(推薦,自動(dòng)安裝所有依賴) pip install pyautogui # 國(guó)內(nèi)鏡像源安裝(解決下載慢問(wèn)題,阿里云/清華源二選一) pip install pyautogui -i https://mirrors.aliyun.com/pypi/simple/ pip install pyautogui -i https://pypi.tuna.tsinghua.edu.cn/simple/
2. 系統(tǒng)額外依賴(部分系統(tǒng)需手動(dòng)安裝)
- Windows:無(wú)需額外操作,安裝后可直接使用;
- Mac:需開啟「輔助功能」權(quán)限(設(shè)置→安全性與隱私→輔助功能,勾選終端 / VSCode 等運(yùn)行 Python 的程序),否則會(huì)提示權(quán)限不足;
- Linux:需安裝底層依賴,執(zhí)行命令
sudo apt-get install scrot python3-xlib python3-pip,并開啟屏幕錄制權(quán)限。
3. 驗(yàn)證安裝成功
運(yùn)行以下代碼,若無(wú)報(bào)錯(cuò)則說(shuō)明安裝成功:
import pyautogui
# 打印PyAutoGUI版本,驗(yàn)證庫(kù)導(dǎo)入成功
print("PyAutoGUI版本:", pyautogui.__version__)
二、基礎(chǔ)配置:規(guī)避風(fēng)險(xiǎn) + 全局設(shè)置
PyAutoGUI 模擬的鍵鼠操作是自動(dòng)執(zhí)行的,若代碼邏輯出錯(cuò)(如無(wú)限循環(huán)點(diǎn)擊),手動(dòng)終止會(huì)非常困難,因此首先要配置安全設(shè)置,同時(shí)可設(shè)置全局的操作延遲、鼠標(biāo)緩動(dòng)等參數(shù),讓自動(dòng)化操作更符合人類習(xí)慣。
1. 核心安全配置(必設(shè))
import pyautogui # 1. 緊急終止:將鼠標(biāo)移到屏幕左上角(坐標(biāo)(0,0)),會(huì)觸發(fā)PyAutoGUIException,終止所有操作 pyautogui.FAILSAFE = True # 默認(rèn)開啟,建議保持True # 2. 操作延遲:所有鍵鼠操作后添加N秒延遲,避免操作過(guò)快(單位:秒) pyautogui.PAUSE = 0.5 # 建議設(shè)置0.5-1秒,兼顧效率和穩(wěn)定性 # 3. 鼠標(biāo)緩動(dòng):設(shè)置鼠標(biāo)移動(dòng)的平滑度,0為瞬間移動(dòng),1為最平滑(可選) pyautogui.MINIMUM_DURATION = 0.1 # 鼠標(biāo)移動(dòng)最短時(shí)間 pyautogui.MAXIMUM_DURATION = 0.5 # 鼠標(biāo)移動(dòng)最長(zhǎng)時(shí)間
2. 關(guān)鍵基礎(chǔ)函數(shù)
# 1. 獲取屏幕分辨率(返回元組:(寬度, 高度))
screen_width, screen_height = pyautogui.size()
print(f"屏幕分辨率:{screen_width}×{screen_height}")
# 2. 獲取當(dāng)前鼠標(biāo)坐標(biāo)(返回元組:(x, y))
x, y = pyautogui.position()
print(f"當(dāng)前鼠標(biāo)坐標(biāo):X={x}, Y={y}")
# 3. 暫停執(zhí)行(類似time.sleep(),更貼合PyAutoGUI使用場(chǎng)景)
pyautogui.sleep(2) # 暫停2秒
坐標(biāo)說(shuō)明:PyAutoGUI 的屏幕坐標(biāo)以左上角為原點(diǎn) (0,0),向右為 X 軸正方向,向下為 Y 軸正方向,所有鼠標(biāo)操作均基于此坐標(biāo)體系。
三、鼠標(biāo)自動(dòng)化:核心操作全解析
鼠標(biāo)操作是 PyAutoGUI 的核心功能之一,覆蓋移動(dòng)、點(diǎn)擊、雙擊、右擊、拖拽、滾輪滑動(dòng)等所有常用操作,支持指定坐標(biāo)、自定義按鍵、設(shè)置點(diǎn)擊時(shí)長(zhǎng)。
1. 鼠標(biāo)移動(dòng):moveTo () & moveRel ()
moveTo(x, y):絕對(duì)移動(dòng),將鼠標(biāo)移到屏幕指定坐標(biāo) (x,y);moveRel(dx, dy):相對(duì)移動(dòng),以當(dāng)前鼠標(biāo)位置為基準(zhǔn),向 X 軸移動(dòng) dx 像素,向 Y 軸移動(dòng) dy 像素(dx/dy 為負(fù)則反向移動(dòng))。
import pyautogui # 1. 絕對(duì)移動(dòng):移到屏幕正中央(基于屏幕分辨率計(jì)算) screen_w, screen_h = pyautogui.size() center_x, center_y = screen_w / 2, screen_h / 2 pyautogui.moveTo(center_x, center_y, duration=0.8) # duration:移動(dòng)耗時(shí),0.8秒(可選) # 2. 相對(duì)移動(dòng):從當(dāng)前位置向右移動(dòng)100像素,向下移動(dòng)50像素 pyautogui.moveRel(100, 50, duration=0.5) # 3. 瞬間移動(dòng):去掉duration參數(shù),鼠標(biāo)瞬間到達(dá)指定位置 pyautogui.moveTo(100, 100)
2. 鼠標(biāo)點(diǎn)擊:click () 萬(wàn)能方法
click()是鼠標(biāo)點(diǎn)擊的萬(wàn)能函數(shù),支持左鍵 / 右鍵 / 中鍵、單點(diǎn)擊 / 雙擊、按下 / 松開分離操作,參數(shù)可靈活配置,替代leftClick()、rightClick()等專用函數(shù)。
核心參數(shù):
x, y:點(diǎn)擊的坐標(biāo),默認(rèn)當(dāng)前鼠標(biāo)位置;button:點(diǎn)擊的按鍵,可選left(左鍵,默認(rèn))、right(右鍵)、middle(中鍵);clicks:點(diǎn)擊次數(shù),默認(rèn) 1 次,設(shè)為 2 則為雙擊;interval:多次點(diǎn)擊的間隔時(shí)間,單位秒,默認(rèn) 0.0;duration:鼠標(biāo)移到目標(biāo)坐標(biāo)的耗時(shí),單位秒,默認(rèn) 0.0。
import pyautogui # 1. 左鍵單擊:移到(200,200)并點(diǎn)擊(默認(rèn)左鍵) pyautogui.click(200, 200, duration=0.5) # 2. 右鍵單擊:移到(300,300)并右擊 pyautogui.click(300, 300, button='right', duration=0.5) # 3. 左鍵雙擊:移到(400,400),雙擊,間隔0.2秒 pyautogui.click(400, 400, clicks=2, interval=0.2, duration=0.5) # 4. 中鍵單擊(滾輪點(diǎn)擊):移到(500,500)并點(diǎn)擊中鍵 pyautogui.click(500, 500, button='middle', duration=0.5) # 專用點(diǎn)擊函數(shù)(簡(jiǎn)化版,功能與click一致) pyautogui.leftClick(600, 600) # 左鍵單擊 pyautogui.rightClick(700, 700) # 右鍵單擊 pyautogui.doubleClick(800, 800)# 左鍵雙擊
3. 鼠標(biāo)按下 / 松開:mouseDown () & mouseUp ()
用于模擬長(zhǎng)按鼠標(biāo)的操作(如拖拽、連續(xù)選中文字),分別對(duì)應(yīng) “按下鼠標(biāo)鍵” 和 “松開鼠標(biāo)鍵”,需配合使用。
import pyautogui # 移到(100,100),按下左鍵→暫停1秒→松開左鍵(模擬長(zhǎng)按1秒) pyautogui.moveTo(100, 100, duration=0.5) pyautogui.mouseDown(button='left') # 按下左鍵 pyautogui.sleep(1) pyautogui.mouseUp(button='left') # 松開左鍵 # 右鍵長(zhǎng)按:移到(200,200),按下右鍵→松開右鍵 pyautogui.moveTo(200, 200, duration=0.5) pyautogui.mouseDown(button='right') pyautogui.mouseUp(button='right')
4. 鼠標(biāo)拖拽:dragTo () & dragRel ()
模擬按住鼠標(biāo)并拖動(dòng)的操作,用于選中文字、拖拽文件 / 窗口、繪制圖形等,分為絕對(duì)拖拽和相對(duì)拖拽。
dragTo(x, y):絕對(duì)拖拽,從當(dāng)前位置拖到指定坐標(biāo) (x,y);dragRel(dx, dy):相對(duì)拖拽,從當(dāng)前位置向 X/Y 軸拖拽指定像素。
import pyautogui # 1. 絕對(duì)拖拽:從(100,100)拖到(500,500)(按住左鍵) pyautogui.moveTo(100, 100, duration=0.5) pyautogui.dragTo(500, 500, button='left', duration=0.8) # 2. 相對(duì)拖拽:從當(dāng)前位置向右拖300像素,向上拖100像素(按住左鍵) pyautogui.dragRel(300, -100, button='left', duration=0.5) # 3. 右鍵拖拽(少數(shù)場(chǎng)景用,如文件右鍵拖拽復(fù)制) pyautogui.moveTo(200, 200, duration=0.5) pyautogui.dragTo(600, 600, button='right', duration=0.8)
5. 滾輪滑動(dòng):scroll ()
模擬鼠標(biāo)滾輪的上下滑動(dòng),正數(shù)為向上滑動(dòng),負(fù)數(shù)為向下滑動(dòng),參數(shù)為滑動(dòng)的 “刻度數(shù)”(不同系統(tǒng)刻度對(duì)應(yīng)的滑動(dòng)距離略有差異,一般設(shè) 10/20 即可)。
import pyautogui
# 移到屏幕中央,再操作滾輪
screen_w, screen_h = pyautogui.size()
pyautogui.moveTo(screen_w/2, screen_h/2, duration=0.5)
# 1. 向上滑動(dòng)滾輪(刻度數(shù)10)
pyautogui.scroll(10)
# 2. 向下滑動(dòng)滾輪(刻度數(shù)20,滑動(dòng)距離更大)
pyautogui.scroll(-20)
# 3. 連續(xù)向下滑動(dòng):循環(huán)3次,每次滑10刻度
for _ in range(3):
pyautogui.scroll(-10)
pyautogui.sleep(0.3)
四、鍵盤自動(dòng)化:輸入 / 快捷鍵全實(shí)現(xiàn)
鍵盤操作支持普通文字輸入、特殊字符輸入、快捷鍵觸發(fā)、按鍵長(zhǎng)按 / 松開,能模擬人類的所有鍵盤操作,還支持多語(yǔ)言輸入(需系統(tǒng)輸入法配合)。
1. 普通文字輸入:typewrite ()
核心參數(shù):
message:要輸入的文字(字符串);interval:每個(gè)字符的輸入間隔,單位秒,默認(rèn) 0.0(模擬手動(dòng)打字可設(shè) 0.1-0.2);pause:輸入完成后的暫停時(shí)間,單位秒,默認(rèn) None(使用全局 PAUSE)。
import pyautogui
# 先打開一個(gè)記事本/文本框(手動(dòng)操作,或后續(xù)用窗口自動(dòng)化)
pyautogui.sleep(3) # 預(yù)留3秒,手動(dòng)點(diǎn)擊輸入框
# 1. 快速輸入文字(無(wú)間隔)
pyautogui.typewrite("Hello PyAutoGUI!")
# 2. 模擬手動(dòng)打字(每個(gè)字符間隔0.1秒)
pyautogui.typewrite("Python自動(dòng)化入門", interval=0.1)
# 3. 換行輸入+組合文字
pyautogui.typewrite("\n") # 換行(轉(zhuǎn)義字符有效)
pyautogui.typewrite("坐標(biāo)(0,0)是屏幕左上角", interval=0.05)
注意:typewrite()默認(rèn)輸入英文 / 數(shù)字 / 符號(hào),若要輸入中文,需確保系統(tǒng)輸入法為中文狀態(tài)(可手動(dòng)切換,或用hotkey()模擬輸入法切換)。
2. 特殊按鍵輸入:keyDown () & keyUp () & press ()
PyAutoGUI 將所有特殊按鍵(如回車、空格、方向鍵、功能鍵)定義為字符串常量,常用特殊按鍵如下:
| 按鍵常量 | 對(duì)應(yīng)實(shí)際按鍵 | 按鍵常量 | 對(duì)應(yīng)實(shí)際按鍵 |
|---|---|---|---|
enter | 回車 | space | 空格 |
tab | 制表符 | backspace | 退格 |
delete | 刪除 | esc | 退出 |
shift | 上檔鍵 | ctrl | 控制鍵 |
alt | 切換鍵 | win | Windows 鍵(Mac 為command) |
up/down | 上下方向鍵 | left/right | 左右方向鍵 |
f1-f12 | 功能鍵 | capslock | 大小寫鎖定 |
(1)單次按鍵:press ()
模擬按下并松開單個(gè)按鍵,簡(jiǎn)化版的keyDown()+keyUp()。
import pyautogui
pyautogui.sleep(3) # 預(yù)留3秒,點(diǎn)擊輸入框
# 輸入文字→按回車→按空格→按退格
pyautogui.typewrite("測(cè)試特殊按鍵")
pyautogui.press("enter") # 回車
pyautogui.press("space") # 空格
pyautogui.press("backspace") # 退格
pyautogui.press("delete") # 刪除
(2)按鍵長(zhǎng)按 / 松開:keyDown () & keyUp ()
用于模擬長(zhǎng)按按鍵的操作(如連續(xù)按方向鍵、長(zhǎng)按 Shift 選中文字)。
import pyautogui
pyautogui.sleep(3)
# 長(zhǎng)按Shift→輸入大寫字母→松開Shift(模擬大寫輸入)
pyautogui.keyDown("shift")
pyautogui.typewrite("hello") # 輸出HELLO
pyautogui.keyUp("shift")
# 長(zhǎng)按方向鍵右→移動(dòng)光標(biāo)5次→松開
for _ in range(5):
pyautogui.keyDown("right")
pyautogui.sleep(0.1)
pyautogui.keyUp("right")
3. 快捷鍵觸發(fā):hotkey ()
模擬組合快捷鍵的操作,如Ctrl+C復(fù)制、Ctrl+V粘貼、Ctrl+S保存,直接傳入多個(gè)按鍵常量即可,按順序執(zhí)行 “按住所有按鍵→松開所有按鍵”。
import pyautogui
pyautogui.sleep(3) # 預(yù)留3秒,打開文本并輸入內(nèi)容
# 1. 全選:Ctrl+A(Windows/Mac通用,Mac的Ctrl實(shí)際是command,可直接用ctrl)
pyautogui.hotkey("ctrl", "a")
# 2. 復(fù)制:Ctrl+C
pyautogui.hotkey("ctrl", "c")
# 3. 粘貼:Ctrl+V
pyautogui.hotkey("ctrl", "v")
# 4. 保存:Ctrl+S
pyautogui.hotkey("ctrl", "s")
# 5. 關(guān)閉窗口:Alt+F4(Windows)/ Command+Q(Mac)
# pyautogui.hotkey("alt", "f4")
# 6. 截圖:PrintScreen(Windows)
# pyautogui.hotkey("printscreen")
Mac 系統(tǒng)注意:將ctrl替換為command即可,如hotkey("command", "c")實(shí)現(xiàn)復(fù)制。
五、屏幕操作:截圖 / 像素 / 定位全功能
PyAutoGUI 集成了屏幕截圖、像素顏色識(shí)別、圖像定位功能,能讓自動(dòng)化操作 “看得見”—— 通過(guò)識(shí)別屏幕上的圖像 / 像素,實(shí)現(xiàn)精準(zhǔn)定位目標(biāo)窗口 / 按鈕,讓自動(dòng)化從 “固定坐標(biāo)” 升級(jí)為 “智能識(shí)別”。
1. 屏幕截圖:screenshot ()
支持全屏截圖和指定區(qū)域截圖,返回 PIL 圖像對(duì)象,可保存為圖片文件,也可直接用于圖像定位。
import pyautogui
# 1. 全屏截圖并保存為文件
screenshot1 = pyautogui.screenshot("full_screen.png") # 保存到當(dāng)前目錄,命名為full_screen.png
# 2. 指定區(qū)域截圖:(x1, y1, 寬度, 高度),從(100,100)開始,寬400像素,高300像素
screenshot2 = pyautogui.screenshot("area_screen.png", region=(100, 100, 400, 300))
# 3. 截圖不保存,僅獲取圖像對(duì)象(用于后續(xù)像素識(shí)別/圖像定位)
screen_img = pyautogui.screenshot()
2. 像素顏色識(shí)別:pixel () & pixelMatchesColor ()
pixel(x, y):獲取屏幕指定坐標(biāo) (x,y) 的像素顏色,返回元組(R, G, B)(紅、綠、藍(lán)通道值,0-255);pixelMatchesColor(x, y, (R, G, B)):判斷指定坐標(biāo)的像素顏色是否與目標(biāo) RGB 一致,返回布爾值,支持設(shè)置容差tolerance(解決顏色細(xì)微偏差)。
import pyautogui
# 1. 獲取指定坐標(biāo)的像素顏色
color = pyautogui.pixel(200, 200)
print(f"坐標(biāo)(200,200)的像素顏色:R={color[0]}, G={color[1]}, B={color[2]}")
# 2. 判斷像素顏色是否匹配(嚴(yán)格匹配)
is_match = pyautogui.pixelMatchesColor(200, 200, (255, 255, 255)) # 白色
print(f"是否為白色:{is_match}")
# 3. 帶容差的匹配(容差tolerance=10,允許RGB各通道偏差±10)
is_match2 = pyautogui.pixelMatchesColor(200, 200, (255, 255, 255), tolerance=10)
print(f"帶容差是否為白色:{is_match2}")
3. 圖像定位:locateOnScreen () 系列(核心智能功能)
通過(guò)目標(biāo)圖片在屏幕上定位其坐標(biāo),實(shí)現(xiàn) “找到按鈕再點(diǎn)擊”“找到窗口再操作”,告別固定坐標(biāo)的局限性,是自動(dòng)化的核心進(jìn)階功能。
前提準(zhǔn)備
將需要定位的目標(biāo)(如微信圖標(biāo)、確認(rèn)按鈕、記事本窗口)截圖,保存為清晰的圖片(建議 PNG 格式,去除多余背景),命名為target.png,放在 Python 腳本同目錄下。
核心函數(shù)
locateOnScreen(image, confidence=0.8):在屏幕上查找目標(biāo)圖片的位置,返回元組(x, y, 寬度, 高度)(目標(biāo)左上角坐標(biāo) + 寬高),confidence為匹配精度(0-1,建議 0.8,過(guò)低易誤匹配,過(guò)高易漏匹配);locateCenterOnScreen(image, confidence=0.8):直接返回目標(biāo)圖片的中心坐標(biāo)(x, y),最適合配合click()使用;locateAllOnScreen(image, confidence=0.8):查找屏幕上所有匹配的目標(biāo),返回迭代器,適合多目標(biāo)操作。
import pyautogui
# 注意:target.png為目標(biāo)截圖,需與腳本同目錄,confidence設(shè)置0.8(匹配精度)
# 若提示找不到圖片,可降低confidence至0.7,或重新截圖(確保目標(biāo)清晰、無(wú)遮擋)
try:
# 1. 定位目標(biāo)中心坐標(biāo)
target_x, target_y = pyautogui.locateCenterOnScreen("target.png", confidence=0.8)
print(f"目標(biāo)中心坐標(biāo):({target_x}, {target_y})")
# 2. 點(diǎn)擊目標(biāo)(智能定位+點(diǎn)擊,無(wú)需固定坐標(biāo))
pyautogui.click(target_x, target_y, duration=0.5)
# 3. 查找所有匹配的目標(biāo)并依次點(diǎn)擊
all_targets = pyautogui.locateAllOnScreen("target.png", confidence=0.8)
for target in all_targets:
# 獲取每個(gè)目標(biāo)的中心坐標(biāo)
center_x, center_y = pyautogui.center(target)
pyautogui.click(center_x, center_y, duration=0.3)
pyautogui.sleep(0.5)
except pyautogui.ImageNotFoundException:
# 捕獲圖片未找到異常,避免程序崩潰
print("未找到目標(biāo)圖片,請(qǐng)檢查截圖是否正確、目標(biāo)是否在屏幕上")
注意:若運(yùn)行時(shí)提示AttributeError: module 'cv2' has no attribute 'IMREAD_COLOR',需安裝 OpenCV 依賴:pip install opencv-python(圖像定位依賴 OpenCV 做匹配)。
六、高級(jí)功能:彈窗提示 / 批量操作 / 防檢測(cè)
1. 彈窗提示:alert ()/confirm ()/prompt ()/password ()
PyAutoGUI 內(nèi)置簡(jiǎn)單的彈窗功能,用于自動(dòng)化過(guò)程中的提示、確認(rèn)、輸入,替代系統(tǒng)彈窗,適合簡(jiǎn)單的交互場(chǎng)景。
import pyautogui
# 1. 提示彈窗(只有確定按鈕)
pyautogui.alert(text="自動(dòng)化操作即將開始!", title="提示", button="確定")
# 2. 確認(rèn)彈窗(確定/取消按鈕,返回點(diǎn)擊的按鈕文字)
result = pyautogui.confirm(text="是否繼續(xù)執(zhí)行自動(dòng)化?", title="確認(rèn)", buttons=["確定", "取消"])
if result == "確定":
print("執(zhí)行自動(dòng)化操作")
else:
print("取消自動(dòng)化操作")
# 3. 輸入彈窗(返回輸入的文字,取消則返回None)
input_text = pyautogui.prompt(text="請(qǐng)輸入要輸入的內(nèi)容:", title="輸入", default="默認(rèn)文字")
if input_text:
print(f"你輸入的內(nèi)容:{input_text}")
# 4. 密碼彈窗(輸入內(nèi)容隱藏,返回輸入的密碼,取消則返回None)
pwd = pyautogui.password(text="請(qǐng)輸入密碼:", title="密碼驗(yàn)證", default="", mask="*")
print(f"你輸入的密碼:{pwd}")
2. 批量操作:循環(huán) + 異常捕獲
自動(dòng)化中常需要批量執(zhí)行重復(fù)操作,配合for/while循環(huán) + 異常捕獲,能讓程序更健壯,避免單次操作失敗導(dǎo)致整體崩潰。
import pyautogui
# 設(shè)置全局配置
pyautogui.FAILSAFE = True
pyautogui.PAUSE = 0.5
# 批量執(zhí)行10次點(diǎn)擊操作(模擬批量處理)
try:
for i in range(1, 11):
# 定位目標(biāo)并點(diǎn)擊
target_x, target_y = pyautogui.locateCenterOnScreen("target.png", confidence=0.8)
pyautogui.click(target_x, target_y)
print(f"第{i}次操作完成")
# 每5次操作暫停2秒,防檢測(cè)
if i % 5 == 0:
pyautogui.sleep(2)
except pyautogui.ImageNotFoundException:
print("未找到目標(biāo),停止批量操作")
except Exception as e:
print(f"操作失敗,錯(cuò)誤信息:{e}")
finally:
pyautogui.alert(text="批量操作結(jié)束!", title="完成", button="確定")
3. 簡(jiǎn)單防檢測(cè):模擬人類操作
PyAutoGUI 模擬的操作過(guò)于 “機(jī)械”,部分軟件 / 網(wǎng)站會(huì)檢測(cè)到自動(dòng)化,可通過(guò)以下方式簡(jiǎn)單規(guī)避:
- 設(shè)置操作間隔:
pyautogui.PAUSE=0.5-1秒,避免操作過(guò)快; - 加入隨機(jī)延遲:導(dǎo)入
random庫(kù),在操作中加入隨機(jī)暫停,如pyautogui.sleep(random.uniform(0.2, 0.8)); - 鼠標(biāo)緩動(dòng)移動(dòng):保留
duration參數(shù),讓鼠標(biāo)移動(dòng)有平滑過(guò)程,而非瞬間移動(dòng); - 批量操作中偶爾暫停:每執(zhí)行 N 次操作,暫停 2-3 秒,模擬人類休息。
import pyautogui import random # 隨機(jī)延遲+緩動(dòng)移動(dòng),模擬人類操作 pyautogui.FAILSAFE = True pyautogui.PAUSE = random.uniform(0.3, 0.7) # 隨機(jī)全局暫停 # 移到屏幕中央(隨機(jī)耗時(shí)0.3-0.9秒) screen_w, screen_h = pyautogui.size() pyautogui.moveTo(screen_w/2, screen_h/2, duration=random.uniform(0.3, 0.9)) # 點(diǎn)擊目標(biāo)(隨機(jī)延遲后點(diǎn)擊) pyautogui.sleep(random.uniform(0.2, 0.5)) pyautogui.click(duration=0.2)
七、實(shí)戰(zhàn)案例:辦公自動(dòng)化 —— 批量新建記事本并寫入內(nèi)容
結(jié)合以上所有核心知識(shí)點(diǎn),實(shí)現(xiàn)一個(gè)實(shí)用的辦公自動(dòng)化案例:模擬鍵鼠操作,批量新建 10 個(gè)記事本文件,分別寫入指定內(nèi)容并保存到桌面,全程無(wú)需手動(dòng)操作。
案例要求
- 打開 Windows 開始菜單,搜索并啟動(dòng)記事本;
- 依次寫入指定內(nèi)容,以 “筆記 1.txt、筆記 2.txt……” 命名;
- 保存到桌面,關(guān)閉記事本,循環(huán)執(zhí)行 10 次;
- 加入智能定位、異常捕獲、防檢測(cè)機(jī)制。
完整實(shí)戰(zhàn)代碼
import pyautogui
import random
import time
# ===================== 全局配置 =====================
pyautogui.FAILSAFE = True # 緊急終止
pyautogui.PAUSE = random.uniform(0.4, 0.8) # 隨機(jī)操作間隔,防檢測(cè)
CONFIDENCE = 0.75 # 圖像匹配精度
SAVE_PATH = "桌面" # 保存路徑(Windows)
# ===================== 工具函數(shù) =====================
def random_sleep(min_t=0.2, max_t=0.6):
"""隨機(jī)暫停,模擬人類操作"""
time.sleep(random.uniform(min_t, max_t))
def click_target(image_path):
"""智能定位并點(diǎn)擊目標(biāo),返回是否成功"""
try:
x, y = pyautogui.locateCenterOnScreen(image_path, confidence=CONFIDENCE)
pyautogui.moveTo(x, y, duration=random.uniform(0.3, 0.7))
random_sleep()
pyautogui.click()
return True
except pyautogui.ImageNotFoundException:
print(f"未找到目標(biāo):{image_path}")
return False
# ===================== 主程序 =====================
if __name__ == "__main__":
# 提前截圖:start_menu.png(開始菜單圖標(biāo))、notepad.png(記事本搜索結(jié)果)、save.png(保存按鈕)
# 確保截圖保存在腳本同目錄,目標(biāo)無(wú)遮擋
try:
# 1. 點(diǎn)擊Windows開始菜單
if not click_target("start_menu.png"):
raise Exception("打開開始菜單失敗")
random_sleep(0.5, 1.0)
# 2. 輸入“記事本”并回車啟動(dòng)
pyautogui.typewrite("記事本", interval=random.uniform(0.1, 0.2))
random_sleep()
pyautogui.press("enter")
random_sleep(1.0, 1.5) # 等待記事本啟動(dòng)
# 3. 批量新建10個(gè)筆記
for i in range(1, 11):
# 寫入內(nèi)容
content = f"這是第{i}個(gè)記事本文件,由PyAutoGUI自動(dòng)化生成!\n生成時(shí)間:{time.strftime('%Y-%m-%d %H:%M:%S')}"
pyautogui.typewrite(content, interval=random.uniform(0.05, 0.1))
random_sleep()
# 快捷鍵保存:Ctrl+S
pyautogui.hotkey("ctrl", "s")
random_sleep(0.8, 1.2) # 等待保存窗口彈出
# 輸入文件名并保存
pyautogui.typewrite(f"筆記{i}.txt", interval=random.uniform(0.1, 0.2))
random_sleep()
pyautogui.press("enter")
random_sleep()
# 新建空白記事本:Ctrl+N
pyautogui.hotkey("ctrl", "n")
random_sleep(0.5, 1.0)
# 4. 關(guān)閉記事本:Alt+F4
pyautogui.hotkey("alt", "f4")
pyautogui.alert(text="批量操作完成!\n共生成10個(gè)記事本文件,保存至桌面", title="成功", button="確定")
except Exception as e:
pyautogui.alert(text=f"操作失敗!\n錯(cuò)誤信息:{str(e)}", title="失敗", button="確定")
print(f"程序異常:{e}")
使用說(shuō)明:
- 提前截圖
start_menu.png(Windows 開始菜單圖標(biāo)),保存到腳本同目錄; - 運(yùn)行代碼后,程序會(huì)自動(dòng)打開開始菜單、啟動(dòng)記事本;
- 全程無(wú)需手動(dòng)操作,生成的文件會(huì)自動(dòng)保存到桌面,命名為 “筆記 1.txt - 筆記 10.txt”;
- 若某一步失敗,會(huì)彈出錯(cuò)誤彈窗并打印信息,便于排查。
八、常見問(wèn)題與解決方案
- 權(quán)限不足(Mac/Linux):開啟系統(tǒng)的 “輔助功能”“屏幕錄制” 權(quán)限,勾選運(yùn)行 Python 的程序;
- 找不到目標(biāo)圖片:重新截圖(確保目標(biāo)清晰、無(wú)遮擋),降低
confidence至 0.7-0.75,檢查圖片路徑是否正確; - 操作坐標(biāo)偏移:確保屏幕分辨率無(wú)縮放(Windows 設(shè)置→系統(tǒng)→顯示→縮放設(shè)為 100%),Mac 關(guān)閉視網(wǎng)膜縮放;
- 程序無(wú)法終止:將鼠標(biāo)快速移到屏幕左上角 (0,0),觸發(fā) FAILSAFE 緊急終止;
- 中文輸入失敗:確保系統(tǒng)輸入法為中文狀態(tài),
typewrite()僅負(fù)責(zé)輸入,不切換輸入法,可手動(dòng)切換或用hotkey()模擬切換(如Ctrl+Shift); - 依賴報(bào)錯(cuò):按提示安裝缺失依賴,如
opencv-python(圖像定位)、pillow(圖像處理)、pyperclip(剪貼板)。
九、學(xué)習(xí)拓展與最佳實(shí)踐
- 配合其他庫(kù)使用:
pyperclip:實(shí)現(xiàn)剪貼板讀寫,解決typewrite()中文輸入不便的問(wèn)題;tkinter/PyQt:制作圖形界面,讓自動(dòng)化程序更易用;schedule:實(shí)現(xiàn)定時(shí)自動(dòng)化,如每天 9 點(diǎn)自動(dòng)執(zhí)行辦公操作;psutil:實(shí)現(xiàn)進(jìn)程管理,如自動(dòng)啟動(dòng) / 關(guān)閉軟件。
- 最佳實(shí)踐:
- 所有自動(dòng)化操作前,加入預(yù)留時(shí)間(
sleep(3)),方便手動(dòng)切換到目標(biāo)窗口; - 全程使用異常捕獲(
try/except),避免單次操作失敗導(dǎo)致程序崩潰; - 盡量使用圖像定位(
locateCenterOnScreen()),替代固定坐標(biāo),提升程序兼容性; - 加入隨機(jī)延遲 / 隨機(jī)操作間隔,模擬人類操作,避免被檢測(cè)為自動(dòng)化程序。
- 所有自動(dòng)化操作前,加入預(yù)留時(shí)間(
- 適用場(chǎng)景:
- 辦公自動(dòng)化:批量處理 Excel/Word、新建文件、數(shù)據(jù)錄入;
- 自動(dòng)化測(cè)試:模擬用戶操作,測(cè)試軟件界面功能;
- 重復(fù)性操作:網(wǎng)頁(yè)表單填寫、文件重命名、截圖保存;
- 簡(jiǎn)單游戲輔助:模擬鍵鼠操作,完成重復(fù)性游戲任務(wù)(注意遵守游戲規(guī)則)。
總結(jié)
本文從基礎(chǔ)到實(shí)戰(zhàn),全面講解了 PyAutoGUI 的核心功能,核心要點(diǎn)可總結(jié)為 3 點(diǎn):
- 入門先配置安全設(shè)置(FAILSAFE/PAUSE),避免自動(dòng)化失控,坐標(biāo)體系以屏幕左上角為原點(diǎn);
- 核心操作分為鼠標(biāo)(click/moveTo/dragTo)、鍵盤(typewrite/hotkey)、** 屏幕(locateCenterOnScreen)** 三大類,圖像定位是實(shí)現(xiàn)智能自動(dòng)化的關(guān)鍵;
- 實(shí)戰(zhàn)中需結(jié)合循環(huán)、異常捕獲、隨機(jī)延遲,讓程序更健壯、更貼近人類操作,同時(shí)配合圖像定位替代固定坐標(biāo),提升兼容性。
PyAutoGUI 的核心優(yōu)勢(shì)是簡(jiǎn)潔易懂、快速上手,無(wú)需深入學(xué)習(xí)底層系統(tǒng) API,就能實(shí)現(xiàn)大部分鍵鼠自動(dòng)化需求。建議新手從簡(jiǎn)單案例(如自動(dòng)打開記事本、輸入文字)開始,逐步過(guò)渡到復(fù)雜的批量操作,最終結(jié)合其他 Python 庫(kù)實(shí)現(xiàn)更強(qiáng)大的自動(dòng)化功能。本文所有代碼均可直接復(fù)制運(yùn)行,修改少量參數(shù)即可適配你的實(shí)際場(chǎng)景,希望能幫助你快速掌握 Python 自動(dòng)化入門技能。
到此這篇關(guān)于Python PyAutoGUI超詳細(xì)實(shí)戰(zhàn)教程 附完整教學(xué)代碼的文章就介紹到這了,更多相關(guān)Python PyAutoGUI 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中PyAutoGUI?庫(kù)的使用
- Windows自動(dòng)化Python?pyautogui?RPA操作實(shí)現(xiàn)
- python pyautogui實(shí)現(xiàn)圖片識(shí)別點(diǎn)擊失敗后重試功能
- python實(shí)現(xiàn)模擬鍵盤鼠標(biāo)重復(fù)性操作Pyautogui
- python自動(dòng)化神器pyautogui使用步驟
- Python自動(dòng)操作神器PyAutoGUI的使用教程
- Python利用PyAutoGUI模塊實(shí)現(xiàn)控制鼠標(biāo)鍵盤
- Python中PyAutoGUI幫助文檔(推薦!)
- Python中pyautogui庫(kù)的使用方法匯總
相關(guān)文章
Django+Bootstrap實(shí)現(xiàn)計(jì)算器的示例代碼
本文主要介紹了Django+Bootstrap實(shí)現(xiàn)計(jì)算器的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Python標(biāo)準(zhǔn)庫(kù)uuid模塊(生成唯一標(biāo)識(shí))詳解
uuid通過(guò)Python標(biāo)準(zhǔn)庫(kù)的uuid模塊生成通用唯一ID(或“UUID”)的一種快速簡(jiǎn)便的方法,下面這篇文章主要給大家介紹了關(guān)于Python標(biāo)準(zhǔn)庫(kù)uuid模塊(生成唯一標(biāo)識(shí))?的相關(guān)資料,需要的朋友可以參考下2022-05-05
Python+matplotlib實(shí)現(xiàn)循環(huán)作圖的方法詳解
這篇文章主要為大家介紹了Python如何利用matplotlib實(shí)現(xiàn)循環(huán)作圖的,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2022-06-06
解決python os.mkdir創(chuàng)建目錄失敗的問(wèn)題
今天小編就為大家分享一篇解決python os.mkdir創(chuàng)建目錄失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
pandas把所有大于0的數(shù)設(shè)置為1的方法
今天小編就為大家分享一篇pandas把所有大于0的數(shù)設(shè)置為1的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

