這里主要是記錄一個庫-pynput。 並不是教做壞事。使用Python的庫對鼠標和鍵盤進行記錄,pygame也可以記錄,但是對於主需腰針對鍵盤和鼠標進行記錄,就很笨重。
首先對鍵盤進行記錄:
""" python對鍵盤進行監控 """ from pynput import keyboard def on_press(key): # 鍵盤上的鍵被按下 print(f'{key} : 被按下了!') def on_release(key): # 鍵盤上的鍵被松開 # print(f'{key} : 被松開了!') # 結束程序的按鍵 if key == keyboard.Key.esc: # 如果按下esc鍵,我們結束記錄 return False with keyboard.Listener(on_press=on_press, on_release=on_release) as listner: listner.join()
程序運行后的截圖:
其次是對鼠標進行記錄:
from pynput import mouse def on_click(x, y, button, pressed): # 左鍵 if button == mouse.Button.left: print('左鍵被點擊了!') # 會被打印兩次,按下和彈起都會各打印一次 # 右鍵 elif button == mouse.Button.right: print('郵件被點擊了!') # 原則上講只是打印按下 return False # 這里才是彈起 # 鼠標中鍵 else: print('鼠標中鍵被點擊了!') # 只是按下 return False # 彈起 # 檢測事件 with mouse.Listener(on_click=on_click) as listener: listener.join()
程序運行后截圖如下:
運行程序發現,每次點擊左鍵都會在終端上被打印兩次。是因為鼠標左鍵按下和彈起均被打印了。
還有就是記錄了之后,可以做成日志,然后利用郵件發送到我們的郵箱里(我一般是記錄小朋友上網課的情況)。
from pynput import keyboard,mouse # 鼠標鍵盤 from loguru import logger # 日志 from threading import Thread # 多線程 # 首先打開日志文件 logger.add('20211027.log') # 我一般以時間定義 # 鍵盤事件 def on_press(key): logger.debug(f'{key} : 被敲擊了!') def on_release(key): # print(f'{key} : 被釋放了!') # 如果敲擊了esc鍵,就退出 if key == keyboard.Key.esc: return False # 鼠標事件 def on_click(x, y, button, pressed): # 鼠標左鍵 if button == mouse.Button.left: logger.debug('鼠標左鍵被敲擊了!') elif button == mouse.Button.right: logger.debug('鼠標右鍵被敲擊了!') return False else: logger.debug('鼠標中鍵被敲擊了!') # 開啟第一個線程用於記錄鍵盤操作 def threadFirst(): with keyboard.Listener(on_press=on_press, on_release=on_release) as lsn: lsn.join() # 開啟第二個線程用於記錄鼠標操作 def threadSecond(): with mouse.Listener(on_click=on_click) as listner: listner.join() if __name__ == "__main__": # 啟動兩個線程 t1 = Thread(target=threadFirst) t2 = Thread(target=threadSecond) t1.start() # 啟動第一個線程 t2.start() # 啟動第二個線程
日志文件會被保存在當前文件夾下。經過上述處理,所有的鍵盤和鼠標記錄都會被記錄在日志文件里,后面只需要經過NLTK還原一下場景就行了。
再次申明:此程序會占用cpu大量的資源,別拿去做壞事。有常識的人在自己電腦被占用大量cpu資源的時候肯定知道電腦有異常!