最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動(dòng)化之pynput鍵盤(pán)鼠標(biāo)操作全攻略

 更新時(shí)間:2025年05月26日 08:35:11   作者:lagrahhn  
這篇文章主要為大家詳細(xì)介紹了Python如何使用pynput實(shí)現(xiàn)鍵盤(pán)鼠標(biāo)的自動(dòng)化操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

鍵盤(pán)操作

需要執(zhí)行 pressrelease 來(lái)輸入按鍵。 當(dāng)然,也可以單獨(dú)執(zhí)行 press

from pynput.keyboard import Key, Controller
from time import sleep

# 初始化鍵盤(pán)控制器
keyboard = Controller()

sleep(3)

# 模擬按下和釋放 A 鍵
keyboard.press('a')
keyboard.release('a')

# 模擬按下和釋放 Enter 鍵
keyboard.press(Key.enter)
keyboard.release(Key.enter)

鼠標(biāo)操作

from pynput.mouse import Button,Controller
from time import sleep

# 初始化鼠標(biāo)控制器
mouse = Controller()

sleep(3)

# 模擬鼠標(biāo)移動(dòng)到 (100, 100) 位置
mouse.position = (100, 100)

mouse.click(Button.left,1)

# 模擬鼠標(biāo)右鍵點(diǎn)擊
mouse.click(Button.right, 1)

注意:這里引入的是 pynput.mouse 的 Controller,與鍵盤(pán)處的名稱(chēng)相同,但是作用不同,需要區(qū)分。推薦使用別名的方式將 Controller 命名為 MouseController。下面的方法也會(huì)用別名的方式進(jìn)行區(qū)分。

from pynput.mouse import Controller as MouseController

鍵盤(pán)監(jiān)聽(tīng)

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)聽(tīng)
        return False
  
# 設(shè)置鍵盤(pán)監(jiān)聽(tīng)
with KeyboardListener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

該方法輸出用戶(hù)按下的按鍵,當(dāng)用戶(hù)按下 Esc 時(shí)停止。

全局熱鍵監(jiān)聽(tīng)

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()

鼠標(biāo)監(jiān)聽(tīng)

from pynput.mouse import Listener as MouseListener

def mouse_listener():
    # 添加左鍵點(diǎn)擊計(jì)數(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}')
        # 檢查是否是左鍵點(diǎn)擊且按下?tīng)顟B(tài)
        if button == Button.left and pressed:
            left_click_count += 1
            print(f'左鍵點(diǎn)擊次數(shù): {left_click_count}')

            # 如果左鍵點(diǎn)擊次數(shù)超過(guò)三次,停止監(jiān)聽(tīng)
            if left_click_count >= 3:
                print('左鍵點(diǎn)擊已達(dá)到3次,停止監(jiān)聽(tīng)')
                return False

    def on_scroll(x, y, dx, dy):
        print(f'Scrolled at ({x}, {y})')

  

    # 設(shè)置鼠標(biāo)監(jiān)聽(tīng)
    with MouseListener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
        listener.join()

mouse_listener()

該示例記錄鼠標(biāo)信息,當(dāng)鼠標(biāo)左鍵點(diǎn)擊三次停止。

知識(shí)補(bǔ)充

如何通過(guò)pynput與日志記錄實(shí)現(xiàn)鍵盤(pán)、鼠標(biāo)的監(jiān)聽(tīng)行為?

將相關(guān)的模塊導(dǎo)入到代碼塊中。

# 鼠標(biāo)鍵盤(pán)監(jiān)控
from pynput import keyboard, mouse
# 日志處理
from loguru import logger
# 多線程處理
from threading import Thread

將目標(biāo)日志記錄文件加入到logger代碼處理器中。

logger.add('lister.log')

編寫(xiě)鼠標(biāo)被按下時(shí)的處理函數(shù)。

def on_keyboard_press(key):
    '''
    按鍵時(shí)記錄所按下的鍵
    :param key:
    :return:
    '''
    logger.debug(f'{key} :被按下了')

編寫(xiě)鼠標(biāo)抬起時(shí)的處理函數(shù)。

def on_keyboard_release(key):
    '''
    釋放按鍵處理函數(shù)
    :param key:
    :return:
    '''
    if key == keyboard.Key.esc:
        return False

編寫(xiě)鼠標(biāo)單擊、右擊以及滑輪的處理函數(shù)。

def on_mouse_click(x, y, click, pressed):
    if click == mouse.Button.left:
        logger.debug('鼠標(biāo)左鍵按下了')
    elif click == mouse.Button.right:
        logger.debug('鼠標(biāo)右鍵按下了')
        return False
    else:
        logger.debug('中間滾輪按下了')

將鍵盤(pán)相關(guān)的處理函數(shù)加入到鍵盤(pán)事件的監(jiān)聽(tīng)中。

def func_keyboard():
    '''
    鍵盤(pán)的按下/釋放的監(jiān)聽(tīng)
    :return:
    '''
    with keyboard.Listener(on_press=on_keyboard_press, on_release=on_keyboard_release) as keyboard_listener:
        keyboard_listener.join()

將鼠標(biāo)相關(guān)的處理函數(shù)加入到鼠標(biāo)事件的監(jiān)聽(tīng)中。

def func_keyboard():
    '''
    鍵盤(pán)的按下/釋放的監(jiān)聽(tīng)
    :return:
    '''
    with keyboard.Listener(on_press=on_keyboard_press, on_release=on_keyboard_release) as keyboard_listener:
        keyboard_listener.join()

在main()的處理函數(shù)中將鼠標(biāo)監(jiān)聽(tīng)、鍵盤(pán)監(jiān)聽(tīng)分別作為兩個(gè)線程啟動(dòng)。

if __name__ == '__main__':
    '''
    執(zhí)行線程
    '''
    # 定義鍵盤(pán)監(jiān)聽(tīng)線程
    thread_keyboard = Thread(target=func_keyboard)
    # 定義鼠標(biāo)監(jiān)聽(tīng)線程
    thread_mouse = Thread(target=func_mouse_click)
    # 分別啟動(dòng)線程
    thread_keyboard.start()
    thread_mouse.start()

最后可以得到一份鍵盤(pán)、鼠標(biāo)歷史執(zhí)行狀態(tài)記錄的日志文件,通過(guò)NLTK語(yǔ)言的處理從而逆向推出電腦的操作內(nèi)容,這一部分就不演示了。

到此這篇關(guān)于Python自動(dòng)化之pynput鍵盤(pán)鼠標(biāo)操作全攻略的文章就介紹到這了,更多相關(guān)Python pynput操作鍵盤(pán)鼠標(biāo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 進(jìn)程調(diào)用(subprocess)的實(shí)現(xiàn)

    Python 進(jìn)程調(diào)用(subprocess)的實(shí)現(xiàn)

    在Python編程中,subprocess庫(kù)是一個(gè)功能強(qiáng)大的工具,它允許我們創(chuàng)建新進(jìn)程、連接到其輸入/輸出/錯(cuò)誤管道,并獲取其返回代碼,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2025-10-10
  • Python用5行代碼實(shí)現(xiàn)批量摳圖的示例代碼

    Python用5行代碼實(shí)現(xiàn)批量摳圖的示例代碼

    這篇文章主要介紹了Python用5行代碼實(shí)現(xiàn)批量摳圖的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python?管理系統(tǒng)實(shí)現(xiàn)mysql交互的示例代碼

    python?管理系統(tǒng)實(shí)現(xiàn)mysql交互的示例代碼

    這篇文章主要介紹了python?管理系統(tǒng)實(shí)現(xiàn)mysql交互,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 對(duì)Python 語(yǔ)音識(shí)別框架詳解

    對(duì)Python 語(yǔ)音識(shí)別框架詳解

    今天小編就為大家分享一篇對(duì)Python 語(yǔ)音識(shí)別框架詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python OpenCV一個(gè)窗口中顯示多幅圖像

    Python OpenCV一個(gè)窗口中顯示多幅圖像

    大家好,本篇文章主要講的是Python OpenCV一個(gè)窗口中顯示多幅圖像,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 詳解Python中列表和元祖的使用方法

    詳解Python中列表和元祖的使用方法

    這篇文章主要介紹了詳解Python中列表和元祖的使用方法,代碼基于Python2.x版本,元祖和列表是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-04-04
  • python查詢(xún)mysql中文亂碼問(wèn)題

    python查詢(xún)mysql中文亂碼問(wèn)題

    本文主要是解決python2.7在查詢(xún)mysql時(shí)產(chǎn)生中文亂碼的處理方法,非常的有用,親測(cè)可行,推薦給大家
    2014-11-11
  • Python中面向?qū)ο竽銘?yīng)該知道的一下知識(shí)

    Python中面向?qū)ο竽銘?yīng)該知道的一下知識(shí)

    這篇文章主要介紹了Python中面向?qū)ο竽銘?yīng)該知道的一下知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類(lèi)的方法分析

    python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類(lèi)的方法分析

    這篇文章主要介紹了python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類(lèi)的方法,結(jié)合實(shí)例形式分析了Python動(dòng)態(tài)創(chuàng)建類(lèi)的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • 用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈

    用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈

    這篇文章主要為大家詳細(xì)介紹了用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論

湘潭县| 客服| 云龙县| 苍南县| 苍溪县| 运城市| 谢通门县| 禹城市| 江安县| 无棣县| 磐石市| 平塘县| 棋牌| 额敏县| 克什克腾旗| 潮安县| 林甸县| 平安县| 安福县| 兰溪市| 大姚县| 孝义市| 响水县| 衡东县| 大丰市| 石狮市| 天镇县| 玉田县| 武胜县| 胶州市| 东光县| 定日县| 铁岭市| 玛曲县| 湟中县| 临澧县| 五大连池市| 辽中县| 彭山县| 北安市| 大姚县|