成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 操作你的鼠標和鍵盤

開發 前端
Python 有很多的庫可以實現各種各樣的功能,比如使用 pynput 操作你的鼠標和鍵盤。如果你寫過游戲,那么用 pygame 和 pyglet 也可以,只不過它們畢竟是開發游戲的,要只是為了操作鼠標和鍵盤,用它們就有點小題大做了。

楔子

Python 有很多的庫可以實現各種各樣的功能,比如使用 pynput 操作你的鼠標和鍵盤。如果你寫過游戲,那么用 pygame 和 pyglet 也可以,只不過它們畢竟是開發游戲的,要只是為了操作鼠標和鍵盤,用它們就有點小題大做了。

下面來看看 pynput 這個庫的用法。

操作鼠標

鼠標的操作無非就是點擊按住不放、松開、雙擊,滑動滾輪,移動鼠標等等。

from pynput.mouse import Button, Controller

# 實例化 Controller 得到一個可以操作鼠標的對象
mouse = Controller()
# mouse.position: 獲取當前鼠標位置。
# 屏幕左上角坐標為 (0, 0),右下角為 (屏幕寬度, 屏幕高度)
print(f"當前鼠標位置: {mouse.position}")
"""
當前鼠標位置: (881, 467)
"""

# 給 mouse.position 賦值等于移動鼠標,這里相當于移動到 (100, 100) 的位置
# 如果坐標小于 0,那么等于 0。如果超出屏幕范圍,那么等于最大范圍
mouse.position = (100, 100)  # 此方法等價于 mouse.move(100, 100)
print(f"當前鼠標位置: {mouse.position}")
"""
當前鼠標位置: (100, 100)
"""


# 按下左鍵, 同理 Button.right 是右鍵
mouse.press(Button.left)
# 松開左鍵
mouse.release(Button.left)
# 上面兩行連在一起等于一次單擊
# 如果這兩行緊接著再重復一次,那么整體會實現雙擊的效果
# 因為兩次單擊是連續執行的,沒有等待時間。
# 如果中間來一個 time.sleep,那么就變成兩次單擊了


# 當然鼠標點擊我們有更合適的辦法,使用 click 函數
# 該函數接收兩個參數:點擊鼠標的哪個鍵、以及點擊次數
# 這里連續點擊兩次,等于雙擊
mouse.click(Button.right, 2)

然后是滑動滾輪,這個需要找張圖片來演示。

圖片圖片

這種情況我們如果想知道更多內容,需要向下滑動,也就是沿著 y 軸滑動。

from pynput.mouse import Controller

mouse = Controller()

# 垂直方向、沿著 y 軸向下滑動 2 個 step
# 第一個參數針對水平方向,第二個參數針對垂直方向
# 具體的值表示移動的 step 數
mouse.scroll(0, 2)

那么問題來了,什么是 step 呢?

圖片圖片

點擊一次就會移動一個 step。

圖片圖片

同理這個就是在水平方向上移動。

from pynput.mouse import Controller

mouse = Controller()
# 水平方向:大于 0 向右,小于 0 向左
# 垂直方向:大于 0 向下,小于 0 向上
mouse.scroll(3, 0)

可能有人好奇,可不可以水平、垂直兩個方向同時移動呢?答案是不可以,因為是模擬人來點擊,無非就是效率的問題,所以也要符合常理,而我們平時用鼠標顯然不可能兩個方向同時移動。

監控鼠標

除了操作鼠標之外,pynput 也支持監控,記錄我們做了哪些操作。

from pynput.mouse import Listener, Button

def on_move(x, y):
    print(f"鼠標移動到: ({x}, {y})")

def on_click(x, y, button, is_press):
    if button == Button.left:
        button = "左鍵"
    else:
        button = "右鍵"
    if is_press:
        operator = "按下"
    else:
        operator = "松開"

    print(f"鼠標{button}在 ({x}, {y}) 處{operator}")

def on_scroll(x, y, dx, dy):
    if dx:
        print(f"滑輪在 ({x}, {y}) 處向{'右' if dx > 0 else '左'}滑")
    else:
        print(f"滑輪在 ({x}, {y}) 處向{'下' if dy > 0 else '上'}滑")

with Listener(
    on_move=on_move,
    on_click=on_click,
    on_scroll=on_scroll
) as listener:
    listener.join()
"""
鼠標移動到: (783.17578125, 302.7890625)
鼠標移動到: (777.2734375, 302.7890625)
鼠標移動到: (769.5703125, 302.7890625)
鼠標移動到: (758.74609375, 302.7890625)
滑輪在 (111.03515625, 609.31640625) 處向上滑
滑輪在 (111.03515625, 609.31640625) 處向上滑
滑輪在 (111.03515625, 609.31640625) 處向上滑
滑輪在 (111.03515625, 609.31640625) 處向左滑
滑輪在 (111.03515625, 609.31640625) 處向左滑
鼠標左鍵在 (649.44140625, 448.4765625) 處按下
鼠標左鍵在 (649.44140625, 448.4765625) 處松開
"""

上面實例化 Listener 時,相當于開啟了一個線程,因為 Listener 這個類繼承自 Thread。所以我們調用 listener.join() 就相當于阻塞在這里了,會一直監控鼠標事件。

如果回調函數里面返回了 False,那么監聽會自動停止。

from pynput.mouse import Listener, Button

def on_click(x, y, button, is_press):
    if button == Button.right:
        print("點擊鼠標右鍵,監聽結束")
        return False
    if is_press:
        operator = "按下"
    else:
        operator = "松開"

    print(f"鼠標左鍵在 ({x}, {y}) 處{operator}")


with Listener(
    on_click=on_click,
) as listener:
    listener.join()
"""
鼠標左鍵在 (28.453125, 610.71484375) 處按下
鼠標左鍵在 (28.453125, 610.71484375) 處松開
點擊鼠標右鍵,監聽結束
"""

當然啦,程序在創建 Listener 的時候,使用的是 with 語句,會一直阻塞在這里。如果不希望它阻塞,還可以這么做。

listener = Listener(
    on_move=on_move,
    on_click=on_click,
    on_scroll=on_scroll)

# 啟動子線程開啟監聽,主線程會繼續向下執行
listener.start()
# 如果不想監聽了,可以調用 stop 方法結束
listener.stop()

操作鍵盤

操作鍵盤也比較簡單,無非也是按下某個鍵、松開某個鍵,在按下某個鍵(或者多個)不松開的前提下按下另一個鍵。

下面來操作一下,方法和操作鼠標比較類似。

from pynput.keyboard import Key, Controller

# 實例化一個可以操作鍵盤的對象
keyboard = Controller()

# 按下 a 鍵,小寫
keyboard.press("a")
# 松開 a 鍵
keyboard.release("a")

# 按下 A 鍵,大寫
keyboard.press("A")
# 松開 A 鍵
keyboard.release("A")
"""
像英文字符、數字等等直接輸入相應的字符即可
但如果是 shift、ctrl 等鍵,那么需要調用 Key 里面屬性
"""
# 按下大寫鍵
keyboard.press(Key.caps_lock)
# 松開大寫鍵
keyboard.release(Key.caps_lock)

然后是按住某個鍵不放的前提下,按下另外的鍵。

from pynput.keyboard import Key, Controller

keyboard = Controller()

# shift 有兩個鍵,一個是左邊的、一個是右邊的,此時相當于輸入感嘆號
with keyboard.pressed(Key.shift_l):
    keyboard.press("1")
    keyboard.release("1")

# 如果要同時按下多個鍵,那就輸入多個鍵即可
with keyboard.pressed(Key.shift_l, Key.ctrl_l):
    keyboard.press(Key.f10)

監控鍵盤

監控鍵盤使用的方法和監控鼠標非常類似,依舊是實例化一個類Listener。

from pynput.keyboard import Key, Listener

def on_press(key):
    # 當按下esc,結束監聽
    if key == Key.esc:
        print(f"你按下了 esc,監聽結束")
        return False
    print(f"你按下了 {key} 鍵")

def on_release(key):
    print(f"你松開了 {key} 鍵")


with Listener(
    on_press=on_press, 
    on_release=on_release
) as listener:
    listener.join()
"""
你按下了 'a' 鍵
你松開了 'a' 鍵
你按下了 Key.backspace 鍵
你松開了 Key.backspace 鍵
你按下了 Key.shift 鍵
你松開了 Key.shift 鍵
你按下了 'c' 鍵
你松開了 'c' 鍵
你按下了 Key.enter 鍵
你松開了 Key.enter 鍵
你按下了 esc,監聽結束
"""

以上就是這個模塊的基本內容,具體怎么使用由你自己決定。另外這個模塊在 Linux 上也是可以運行的,但前提是必須有顯示器。

責任編輯:武曉燕 來源: 古明地覺的編程教室
相關推薦

2021-01-20 14:45:10

網絡安全鼠標鍵盤

2009-03-20 11:31:12

Windows 7微軟快捷鍵

2021-08-23 15:24:40

0day黑客漏洞

2017-06-12 13:59:11

2013-11-11 17:07:49

Windows 8.1問題

2018-04-26 16:35:44

PythonMySQL存儲

2018-10-16 08:40:56

Linux鎖住鍵盤桌面應用

2011-05-06 10:31:36

筆記本鍵盤鼠標

2021-02-05 15:50:27

PythonShell命令

2021-12-20 15:06:09

JekyllGit開源

2020-05-11 14:55:44

CSS鼠標前端

2017-12-05 15:26:19

2017-12-05 13:12:35

Android軟鍵盤參數

2009-12-30 10:44:38

Silverlight

2010-09-30 15:59:16

JSPCookie

2016-03-01 11:56:59

2018-08-22 09:00:00

Linux鎖定鍵盤包管理器

2015-11-25 10:52:37

LinuxAptik備份

2018-03-22 11:00:45

PythonRSS

2011-11-21 17:09:29

8042prt錯誤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩国产精品一区二区 | 日韩久久成人 | 日韩毛片 | 欧美中文字幕在线观看 | 亚洲精品欧美一区二区三区 | 国产视频福利 | 超碰国产在线 | 成人午夜视频在线观看 | 在线第一页 | 国产三级日本三级 | 看羞羞视频| 成人精品在线观看 | 国产午夜精品久久久 | 一区二区三区国产好的精 | 精品99在线 | www精品美女久久久tv | 国产一区二 | 精品在线99| 精品欧美一区免费观看α√ | 国产一区二区三区久久久久久久久 | 国产精品久久久久久久久久了 | 久久乐国产精品 | av电影一区 | 国产精品美女 | 国产成人免费视频网站视频社区 | 久草.com| 国产精品18久久久久久久 | www.av在线| 成人一区二区三区在线观看 | 亚洲精品一区中文字幕 | 天天操操| 日本黄色影片在线观看 | 99久久婷婷国产亚洲终合精品 | 国内精品久久久久久久影视简单 | 国产在线精品一区二区 | 久久精品天堂 | 国产精品久久久久久久久久久久久久 | 日韩精品在线一区 | 国产一二三视频在线观看 | 在线视频一区二区 | 亚洲欧美一区二区三区在线 |