從入門到精通詳解Python鍵盤鼠標(biāo)自動(dòng)化庫(kù)
前言
在自動(dòng)化測(cè)試、辦公自動(dòng)化、游戲腳本等場(chǎng)景中,我們經(jīng)常需要模擬鍵盤鼠標(biāo)操作。Python提供了多個(gè)強(qiáng)大的庫(kù)來實(shí)現(xiàn)這些功能。本文將詳細(xì)介紹幾個(gè)主流的鍵盤鼠標(biāo)操作庫(kù),幫助你選擇最適合的工具。
1. PyAutoGUI - 跨平臺(tái)GUI自動(dòng)化利器
PyAutoGUI是最受歡迎的跨平臺(tái)GUI自動(dòng)化庫(kù)之一,支持Windows、macOS和Linux系統(tǒng)。
安裝
pip install pyautogui
主要特性
- 跨平臺(tái)支持(Windows、macOS、Linux)
- 支持鼠標(biāo)移動(dòng)、點(diǎn)擊、拖拽等操作
- 支持鍵盤輸入、快捷鍵等操作
- 提供截圖和圖像識(shí)別功能
- 內(nèi)置安全保護(hù)機(jī)制(fail-safe)
鼠標(biāo)操作示例
import pyautogui
import time
# 設(shè)置暫停時(shí)間,給操作留出緩沖
pyautogui.PAUSE = 1
# 獲取屏幕尺寸
screen_width, screen_height = pyautogui.size()
print(f"屏幕尺寸: {screen_width}x{screen_height}")
# 移動(dòng)鼠標(biāo)到指定位置
pyautogui.moveTo(100, 100, duration=1) # 持續(xù)1秒移動(dòng)到(100,100)
# 相對(duì)移動(dòng)
pyautogui.moveRel(50, 50, duration=0.5) # 相對(duì)當(dāng)前位置移動(dòng)50,50
# 鼠標(biāo)點(diǎn)擊
pyautogui.click(200, 200) # 在(200,200)位置單擊
pyautogui.doubleClick(300, 300) # 雙擊
pyautogui.rightClick(400, 400) # 右鍵單擊
# 鼠標(biāo)拖拽
pyautogui.dragTo(500, 500, duration=1) # 拖拽到指定位置
pyautogui.dragRel(100, 0, duration=0.5) # 相對(duì)拖拽
# 滾動(dòng)鼠標(biāo)
pyautogui.scroll(500) # 向上滾動(dòng)500個(gè)單位
pyautogui.scroll(-500) # 向下滾動(dòng)500個(gè)單位
鍵盤操作示例
# 輸入文本
pyautogui.typewrite('Hello World!', interval=0.1) # 每個(gè)字符間隔0.1秒
# 按鍵操作
pyautogui.press('enter') # 按回車鍵
pyautogui.press(['ctrl', 'a']) # 組合鍵Ctrl+A
# 熱鍵操作
pyautogui.hotkey('ctrl', 'c') # Ctrl+C復(fù)制
pyautogui.hotkey('ctrl', 'v') # Ctrl+V粘貼
# 按鍵事件
pyautogui.keyDown('shift') # 按下Shift
pyautogui.typewrite('hello') # 輸入大寫HELLO
pyautogui.keyUp('shift') # 釋放Shift
安全保護(hù)機(jī)制
PyAutoGUI內(nèi)置了fail-safe保護(hù)機(jī)制:
# 啟用fail-safe模式(默認(rèn)開啟) pyautogui.FAILSAFE = True # 當(dāng)鼠標(biāo)移動(dòng)到屏幕左上角時(shí)會(huì)觸發(fā)FailSafeException # 這可以防止程序失控
2. pynput - 更精細(xì)的控制
pynput提供了更底層的鍵盤鼠標(biāo)控制,適合需要精細(xì)控制的場(chǎng)景。
安裝
pip install pynput
鼠標(biāo)控制
from pynput.mouse import Button, Controller
import time
mouse = Controller()
# 獲取當(dāng)前鼠標(biāo)位置
print(f"當(dāng)前位置: {mouse.position}")
# 設(shè)置鼠標(biāo)位置
mouse.position = (500, 500)
# 相對(duì)移動(dòng)
mouse.move(50, -50)
# 鼠標(biāo)點(diǎn)擊
mouse.click(Button.left, 1) # 左鍵單擊
mouse.click(Button.right, 2) # 右鍵雙擊
mouse.click(Button.middle, 1) # 中鍵單擊
# 按下和釋放
mouse.press(Button.left)
time.sleep(0.1)
mouse.release(Button.left)
# 滾動(dòng)
mouse.scroll(0, 5) # 向上滾動(dòng)5個(gè)單位
鍵盤控制
from pynput.keyboard import Key, Controller
import time
keyboard = Controller()
# 輸入文本
keyboard.type('Hello World!')
# 按鍵操作
keyboard.press(Key.space)
keyboard.release(Key.space)
# 組合鍵
with keyboard.pressed(Key.ctrl):
keyboard.press('a')
keyboard.release('a')
# 功能鍵
keyboard.press(Key.enter)
keyboard.release(Key.enter)
# 特殊按鍵
keyboard.press(Key.f1)
keyboard.release(Key.f1)
監(jiān)聽功能(PyAutoGUI不具備)
from pynput import mouse, keyboard
def on_move(x, y):
print(f"鼠標(biāo)移動(dòng)到: ({x}, {y})")
def on_click(x, y, button, pressed):
print(f"{'按下' if pressed else '釋放'} {button} 在 ({x}, {y})")
if not pressed:
# 停止監(jiān)聽
return False
def on_scroll(x, y, dx, dy):
print(f"鼠標(biāo)滾動(dòng)在 ({x}, {y}),滾動(dòng)量: ({dx}, {dy})")
# 設(shè)置鼠標(biāo)監(jiān)聽
with mouse.Listener(
on_move=on_move,
on_click=on_click,
on_scroll=on_scroll) as listener:
listener.join()
def on_press(key):
try:
print(f"按下字母鍵: {key.char}")
except AttributeError:
print(f"按下特殊鍵: {key}")
def on_release(key):
print(f"釋放: {key}")
if key == keyboard.Key.esc:
# 按ESC鍵停止監(jiān)聽
return False
# 設(shè)置鍵盤監(jiān)聽
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
3. keyboard - 專注鍵盤操作
keyboard庫(kù)專注于鍵盤操作,提供了更簡(jiǎn)單的API。
安裝
pip install keyboard
基本用法
import keyboard
import time
# 輸入文本
keyboard.write('Hello World!')
# 按鍵操作
keyboard.press_and_release('enter')
keyboard.press_and_release('ctrl+a')
# 等待按鍵
keyboard.wait('esc') # 等待ESC鍵被按下
# 檢查按鍵狀態(tài)
if keyboard.is_pressed('ctrl'):
print("Ctrl鍵被按下")
# 添加熱鍵
keyboard.add_hotkey('ctrl+shift+a', lambda: print('熱鍵被觸發(fā)!'))
# 記錄按鍵
recorded = keyboard.record(until='esc')
keyboard.play(recorded) # 重放記錄的按鍵
# 發(fā)送組合鍵
keyboard.send('ctrl+shift+esc') # 打開任務(wù)管理器
4. 各庫(kù)對(duì)比分析
| 特性 | PyAutoGUI | pynput | keyboard |
|---|---|---|---|
| 跨平臺(tái) | ? | ? | ? |
| 鼠標(biāo)控制 | ? | ? | ? |
| 鍵盤控制 | ? | ? | ? |
| 監(jiān)聽功能 | ? | ? | ? |
| 圖像識(shí)別 | ? | ? | ? |
| 易用性 | ???? | ??? | ????? |
| 精細(xì)控制 | ??? | ????? | ??? |
| 文檔完善度 | ????? | ???? | ??? |
5. 實(shí)際應(yīng)用場(chǎng)景
辦公自動(dòng)化
import pyautogui
import time
def auto_fill_form():
"""自動(dòng)填寫表格"""
time.sleep(3) # 給用戶時(shí)間切換到目標(biāo)窗口
# 填寫姓名
pyautogui.click(300, 200)
pyautogui.typewrite('張三')
# 填寫郵箱
pyautogui.press('tab')
pyautogui.typewrite('zhangsan@example.com')
# 選擇下拉框
pyautogui.press('tab')
pyautogui.press('down')
pyautogui.press('enter')
# 提交表單
pyautogui.press('tab')
pyautogui.press('enter')
自動(dòng)化測(cè)試
from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller as KeyboardController
import time
class AutoTester:
def __init__(self):
self.mouse = Controller()
self.keyboard = KeyboardController()
def test_login(self):
"""測(cè)試登錄功能"""
# 點(diǎn)擊用戶名輸入框
self.mouse.position = (400, 300)
self.mouse.click(Button.left, 1)
# 輸入用戶名
self.keyboard.type('testuser')
# 切換到密碼框
self.keyboard.press(Key.tab)
self.keyboard.release(Key.tab)
# 輸入密碼
self.keyboard.type('password123')
# 點(diǎn)擊登錄按鈕
self.mouse.position = (450, 400)
self.mouse.click(Button.left, 1)
# 等待響應(yīng)
time.sleep(2)
# 這里可以添加斷言邏輯
print("登錄測(cè)試完成")
游戲腳本
import pyautogui
import time
import random
def auto_click_game():
"""自動(dòng)點(diǎn)擊游戲"""
print("3秒后開始自動(dòng)點(diǎn)擊,按Ctrl+C停止")
time.sleep(3)
try:
while True:
# 在隨機(jī)位置點(diǎn)擊
x = random.randint(100, 700)
y = random.randint(100, 500)
pyautogui.click(x, y)
# 隨機(jī)等待時(shí)間
wait_time = random.uniform(0.1, 0.5)
time.sleep(wait_time)
except KeyboardInterrupt:
print("\n自動(dòng)點(diǎn)擊已停止")
6. 注意事項(xiàng)和最佳實(shí)踐
1. 安全保護(hù)
# 始終啟用fail-safe保護(hù) pyautogui.FAILSAFE = True # 設(shè)置適當(dāng)?shù)难舆t pyautogui.PAUSE = 0.5
2. 異常處理
try:
# 自動(dòng)化操作
pyautogui.click(100, 100)
pyautogui.typewrite('Hello')
except pyautogui.FailSafeException:
print("Fail-safe被觸發(fā),程序停止")
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {e}")
3. 多顯示器支持
# PyAutoGUI目前只支持主顯示器 # 如果需要支持多顯示器,可以考慮使用其他庫(kù) # 或者使用pygetwindow等庫(kù)來管理窗口
4. 權(quán)限問題
# 在某些系統(tǒng)上需要管理員權(quán)限 # macOS需要在系統(tǒng)偏好設(shè)置中允許輔助功能 # Linux可能需要安裝額外的依賴
7. 總結(jié)
選擇合適的庫(kù)取決于你的具體需求:
- PyAutoGUI:最適合需要跨平臺(tái)GUI自動(dòng)化的場(chǎng)景,功能全面,文檔完善
- pynput:適合需要精細(xì)控制或監(jiān)聽輸入的場(chǎng)景,提供更底層的接口
- keyboard:專注鍵盤操作,API簡(jiǎn)單直觀,適合鍵盤相關(guān)的自動(dòng)化
無論選擇哪個(gè)庫(kù),都要注意安全性和穩(wěn)定性,合理使用延遲和異常處理,確保自動(dòng)化腳本的可靠性。
到此這篇關(guān)于從入門到精通詳解Python鍵盤鼠標(biāo)自動(dòng)化庫(kù)的文章就介紹到這了,更多相關(guān)Python鍵盤鼠標(biāo)自動(dòng)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)Windows鍵盤鼠標(biāo)自動(dòng)化模擬器
- Python實(shí)現(xiàn)自動(dòng)化調(diào)用鼠標(biāo)和鍵盤
- Python自動(dòng)化之pynput鍵盤鼠標(biāo)操作全攻略
- python pyautogui手動(dòng)活動(dòng)(模擬鼠標(biāo)鍵盤)自動(dòng)化庫(kù)使用
- python?PyAutoGUI實(shí)現(xiàn)自動(dòng)化鼠標(biāo)鍵盤等常用操作
- Python RPA自動(dòng)化機(jī)器人模擬鼠標(biāo)鍵盤
- python PyAUtoGUI庫(kù)實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤
- selenium+python自動(dòng)化測(cè)試之鼠標(biāo)和鍵盤事件
相關(guān)文章
python實(shí)現(xiàn)flappy bird小游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)flappy bird小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
使用Python刪除Excel單元格公式并保留數(shù)值
在日常業(yè)務(wù)中,我們經(jīng)常會(huì)遇到含有大量公式的 Excel 文件,例如財(cái)務(wù)報(bào)表、銷售數(shù)據(jù)分析表、項(xiàng)目預(yù)算表等,這些公式在計(jì)算時(shí)非常有用,但有時(shí)我們希望將公式去掉,只保留最終的計(jì)算結(jié)果,本文將介紹如何使用Python自動(dòng)完成這一過程,需要的朋友可以參考下2025-11-11
python openpyxl方法 zip函數(shù)用法及說明
這篇文章主要介紹了python openpyxl方法 zip函數(shù)用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
pytorch中model.train()和model.eval()用法及說明
在PyTorch中,model.train()用于啟用BatchNormalization和Dropout,保證模型在訓(xùn)練階段能夠有效地利用這些層的特性,而model.eval()則是用于測(cè)試階段,確保BatchNormalization和Dropout不會(huì)影響測(cè)試結(jié)果,保持模型的穩(wěn)定性2024-09-09
Python爬蟲抓取技術(shù)的一些經(jīng)驗(yàn)
這篇文章主要介紹了Python爬蟲抓取技術(shù)的一些經(jīng)驗(yàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python高效定時(shí)任務(wù)處理APScheduler庫(kù)深入學(xué)習(xí)
這篇文章主要為大家介紹了Python高效定時(shí)任務(wù)處理APScheduler庫(kù)深入學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Python實(shí)現(xiàn)性能自動(dòng)化測(cè)試竟然如此簡(jiǎn)單
這篇文章主要介紹了Python實(shí)現(xiàn)性能自動(dòng)化測(cè)試的方法,本文圖文并茂通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-07-07
Python常見MongoDB數(shù)據(jù)庫(kù)操作實(shí)例總結(jié)
這篇文章主要介紹了Python常見MongoDB數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式詳細(xì)總結(jié)了Python針對(duì)MongoDB數(shù)據(jù)庫(kù)相關(guān)pymongo庫(kù)安裝以及MongoDB數(shù)據(jù)庫(kù)的增刪改查等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-07-07

