Python-模擬鼠標(biāo)鍵盤動作

在使用電腦的時候,偶爾有需求要模擬鼠標(biāo)鍵盤,進(jìn)行一些機(jī)械重復(fù)的操作(刷新網(wǎng)頁、搶票、某些小游戲等)。如果為此專門下載一個按鍵精靈,總感覺殺雞用牛刀,所以就開始探索一些輕量級解決方案。本人電腦上配置了Python,自然就想到那句名言

人生苦短,我用Python
Life is short, you need Python -Bruce Eckel

方案

參考網(wǎng)上的各種例子后,發(fā)現(xiàn)了PyUserInput這個項(xiàng)目。在配置完成后,調(diào)用非常簡便。

  • 準(zhǔn)備

進(jìn)入項(xiàng)目主頁,可以看到這個Python庫是跨平臺支持的,但是對應(yīng)不同平臺,需要安裝依賴庫。

Linux - Xlib (python-xlib)
Mac - Quartz, AppKit
Windows - pywin32, pyHook


  • 安裝

使用pip工具,直接安裝

pip install PyUserInput


  • 調(diào)用方法

以下部分參考PyUserInput項(xiàng)目在Python官網(wǎng)的說明只做簡要翻譯,方便理解。詳細(xì)方法可以調(diào)用help()函數(shù)查看。

在安裝完P(guān)yUserInput后,pymousepykeyboard模塊就被安裝到你的Python路徑下。

建立一個鼠標(biāo)和鍵盤對象:

from pymouse import PyMouse
from pykeyboard import PyKeyboard
m = PyMouse()
k = PyKeyboard()

接下來是一個示例,完成點(diǎn)擊屏幕中央并鍵入“Hello, World!”的功能:

x_dim, y_dim = m.screen_size()
m.click(x_dim/2, y_dim/2, 1)
k.type_string('Hello, World!')

PyKeyboard還有很多種方式來發(fā)送鍵盤鍵入:

# pressing a key
k.press_key('H')
# which you then follow with a release of the key
k.release_key('H')
# or you can 'tap' a key which does both
k.tap_key('e')
# note that that tap_key does support a way of     repeating keystrokes with a interval time between each
k.tap_key('l',n=2,interval=5) 
# and you can send a string if needed too
k.type_string('o World!')

并且它還支持很多特殊按鍵:

#Create an Alt+Tab combo
k.press_key(k.alt_key)
k.tap_key(k.tab_key)
k.release_key(k.alt_key)
k.tap_key(k.function_keys[5]) # Tap F5
k.tap_key(k.numpad_keys['Home']) # Tap 'Home' on the numpad
k.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thrice

注意,你也可以使用press_keys方法將多個鍵一起發(fā)送(例如,使用某些組合鍵):

# Mac example
k.press_keys(['Command','shift','3'])
# Windows example
k.press_keys([k.windows_l_key,'d'])

平臺之間的一致性是一個很大的挑戰(zhàn),請參考你使用的操作系統(tǒng)對應(yīng)的源碼,來理解你需要使用的按鍵格式。例如:

# Windows
k.tap_key(k.alt_key)
# Mac
k.tap_key('Alternate')

我還想特別說明一下PyMouseEventPyKeyboardEvent的使用。

這些對象是一個架構(gòu)用于監(jiān)聽鼠標(biāo)和鍵盤的輸入;他們除了監(jiān)聽之外不會做任何事,除非你繼承他們【注1】。PyKeyboardEvent為編寫完成,所以這里是一個繼承PyMouseEvent的例子:

from pymouse import PyMouseEvent

def fibo():
    a = 0
    yield a 
    b = 1
    yield b 
    while True:
        a, b = b, a+b
        yield b 

class Clickonacci(PyMouseEvent):
    def __init__(self):
        PyMouseEvent.__init__(self)
        self.fibo = fibo()

    def click(self, x, y, button, press):
        '''Print Fibonacci numbers when the left click is pressed.'''
        if button == 1:
            if press:
                print self.fibo.next()
        else: # Exit if any other mouse button used
            self.stop()

C = Clickonacci()
C.run()

注1:原文為

These objects are a framework for listening for mouse and keyboard input; theydon't do anything besides listen until you subclass them.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容