Python自動化之pynput鍵盤鼠標操作全攻略
鍵盤操作
需要執(zhí)行 press 和 release 來輸入按鍵。 當然,也可以單獨執(zhí)行 press
from pynput.keyboard import Key, Controller
from time import sleep
# 初始化鍵盤控制器
keyboard = Controller()
sleep(3)
# 模擬按下和釋放 A 鍵
keyboard.press('a')
keyboard.release('a')
# 模擬按下和釋放 Enter 鍵
keyboard.press(Key.enter)
keyboard.release(Key.enter)
鼠標操作
from pynput.mouse import Button,Controller from time import sleep # 初始化鼠標控制器 mouse = Controller() sleep(3) # 模擬鼠標移動到 (100, 100) 位置 mouse.position = (100, 100) mouse.click(Button.left,1) # 模擬鼠標右鍵點擊 mouse.click(Button.right, 1)
注意:這里引入的是 pynput.mouse 的 Controller,與鍵盤處的名稱相同,但是作用不同,需要區(qū)分。推薦使用別名的方式將 Controller 命名為 MouseController。下面的方法也會用別名的方式進行區(qū)分。
from pynput.mouse import Controller as MouseController
鍵盤監(jiān)聽
from pynput.keyboard import Listener as KeyboardListener
def on_press(key):
print(f'Alphanumeric key pressed: {key}')
def on_release(key):
print(f'Alphanumeric key released: {key}')
if key == Key.esc:
# 停止監(jiān)聽
return False
# 設(shè)置鍵盤監(jiān)聽
with KeyboardListener(on_press=on_press, on_release=on_release) as listener:
listener.join()
該方法輸出用戶按下的按鍵,當用戶按下 Esc 時停止。
全局熱鍵監(jiān)聽
def keyboard_hotkey():
keyboard_controller = Controller()
def on_activate_f():
print('全局熱鍵 F 被激活')
keyboard_controller.type('你按了熱鍵F')
def on_activate_shift_a():
print('全局熱鍵 Shift+A 被激活')
keyboard_controller.type('你按了熱鍵Shift+A')
# 創(chuàng)建熱鍵
with keyboard.GlobalHotKeys({
'f': on_activate_f,
'<shift>+a': on_activate_shift_a}) as h:
h.join()
鼠標監(jiān)聽
from pynput.mouse import Listener as MouseListener
def mouse_listener():
# 添加左鍵點擊計數(shù)器
left_click_count = 0
def on_move(x, y):
print(f'Mouse moved to ({x}, {y})')
def on_click(x, y, button, pressed):
nonlocal left_click_count
print(f'Mouse clicked at ({x}, {y}) with {button}')
# 檢查是否是左鍵點擊且按下狀態(tài)
if button == Button.left and pressed:
left_click_count += 1
print(f'左鍵點擊次數(shù): {left_click_count}')
# 如果左鍵點擊次數(shù)超過三次,停止監(jiān)聽
if left_click_count >= 3:
print('左鍵點擊已達到3次,停止監(jiān)聽')
return False
def on_scroll(x, y, dx, dy):
print(f'Scrolled at ({x}, {y})')
# 設(shè)置鼠標監(jiān)聽
with MouseListener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
listener.join()
mouse_listener()
該示例記錄鼠標信息,當鼠標左鍵點擊三次停止。
知識補充
如何通過pynput與日志記錄實現(xiàn)鍵盤、鼠標的監(jiān)聽行為?
將相關(guān)的模塊導(dǎo)入到代碼塊中。
# 鼠標鍵盤監(jiān)控 from pynput import keyboard, mouse # 日志處理 from loguru import logger # 多線程處理 from threading import Thread
將目標日志記錄文件加入到logger代碼處理器中。
logger.add('lister.log')
編寫鼠標被按下時的處理函數(shù)。
def on_keyboard_press(key):
'''
按鍵時記錄所按下的鍵
:param key:
:return:
'''
logger.debug(f'{key} :被按下了')
編寫鼠標抬起時的處理函數(shù)。
def on_keyboard_release(key):
'''
釋放按鍵處理函數(shù)
:param key:
:return:
'''
if key == keyboard.Key.esc:
return False
編寫鼠標單擊、右擊以及滑輪的處理函數(shù)。
def on_mouse_click(x, y, click, pressed):
if click == mouse.Button.left:
logger.debug('鼠標左鍵按下了')
elif click == mouse.Button.right:
logger.debug('鼠標右鍵按下了')
return False
else:
logger.debug('中間滾輪按下了')
將鍵盤相關(guān)的處理函數(shù)加入到鍵盤事件的監(jiān)聽中。
def func_keyboard():
'''
鍵盤的按下/釋放的監(jiān)聽
:return:
'''
with keyboard.Listener(on_press=on_keyboard_press, on_release=on_keyboard_release) as keyboard_listener:
keyboard_listener.join()
將鼠標相關(guān)的處理函數(shù)加入到鼠標事件的監(jiān)聽中。
def func_keyboard():
'''
鍵盤的按下/釋放的監(jiān)聽
:return:
'''
with keyboard.Listener(on_press=on_keyboard_press, on_release=on_keyboard_release) as keyboard_listener:
keyboard_listener.join()
在main()的處理函數(shù)中將鼠標監(jiān)聽、鍵盤監(jiān)聽分別作為兩個線程啟動。
if __name__ == '__main__':
'''
執(zhí)行線程
'''
# 定義鍵盤監(jiān)聽線程
thread_keyboard = Thread(target=func_keyboard)
# 定義鼠標監(jiān)聽線程
thread_mouse = Thread(target=func_mouse_click)
# 分別啟動線程
thread_keyboard.start()
thread_mouse.start()
最后可以得到一份鍵盤、鼠標歷史執(zhí)行狀態(tài)記錄的日志文件,通過NLTK語言的處理從而逆向推出電腦的操作內(nèi)容,這一部分就不演示了。
到此這篇關(guān)于Python自動化之pynput鍵盤鼠標操作全攻略的文章就介紹到這了,更多相關(guān)Python pynput操作鍵盤鼠標內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 進程調(diào)用(subprocess)的實現(xiàn)
在Python編程中,subprocess庫是一個功能強大的工具,它允許我們創(chuàng)建新進程、連接到其輸入/輸出/錯誤管道,并獲取其返回代碼,下面就來詳細的介紹一下,感興趣的可以了解一下2025-10-10
python?管理系統(tǒng)實現(xiàn)mysql交互的示例代碼
這篇文章主要介紹了python?管理系統(tǒng)實現(xiàn)mysql交互,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
Python中面向?qū)ο竽銘?yīng)該知道的一下知識
這篇文章主要介紹了Python中面向?qū)ο竽銘?yīng)該知道的一下知識,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07
python實現(xiàn)動態(tài)創(chuàng)建類的方法分析
這篇文章主要介紹了python實現(xiàn)動態(tài)創(chuàng)建類的方法,結(jié)合實例形式分析了Python動態(tài)創(chuàng)建類的原理、實現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈
這篇文章主要為大家詳細介紹了用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11

