有時候我們需要使用python執(zhí)行一些腳本,可能需要讓程序自動按鍵或自動點(diǎn)擊鼠標(biāo),下面的代碼實(shí)現(xiàn)了對鍵盤的模擬按鍵
一、在windowS下模擬實(shí)現(xiàn):
需要安裝pypiwin32庫來實(shí)現(xiàn),所以需要通過以下命令來安裝
pip install pypiwin32
模擬鍵盤:
# coding=utf-8
import win32con
import win32api
import time
key_map = {
"0": 49, "1": 50, "2": 51, "3": 52, "4": 53, "5": 54, "6": 55, "7": 56, "8": 57, "9": 58,
"A": 65, "B": 66, "C": 67, "D": 68, "E": 69, "F": 70, "G": 71, "H": 72, "I": 73, "J": 74,
"K": 75, "L": 76, "M": 77, "N": 78, "O": 79, "P": 80, "Q": 81, "R": 82, "S": 83, "T": 84,
"U": 85, "V": 86, "W": 87, "X": 88, "Y": 89, "Z": 90
}
def key_down(key):
"""
函數(shù)功能:按下按鍵
參 數(shù):key:按鍵值
"""
key = key.upper()
vk_code = key_map[key]
win32api.keybd_event(vk_code,win32api.MapVirtualKey(vk_code,0),0,0)
def key_up(key):
"""
函數(shù)功能:抬起按鍵
參 數(shù):key:按鍵值
"""
key = key.upper()
vk_code = key_map[key]
win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), win32con.KEYEVENTF_KEYUP, 0)
def key_press(key):
"""
函數(shù)功能:點(diǎn)擊按鍵(按下并抬起)
參 數(shù):key:按鍵值
"""
key_down(key)
time.sleep(0.02)
key_up(key)
模擬鼠標(biāo):
# coding=utf-8
import win32api
import win32con
import win32gui
def move(x, y):
"""
函數(shù)功能:移動鼠標(biāo)到指定位置
參 數(shù):x:x坐標(biāo)
y:y坐標(biāo)
"""
win32api.SetCursorPos((x, y))
def get_cur_pos():
"""
函數(shù)功能:獲取當(dāng)前鼠標(biāo)坐標(biāo)
"""
p={"x":0,"y":0}
pos = win32gui.GetCursorPos()
p['x']=pos[0]
p['y']=pos[1]
return p
def left_click():
"""
函數(shù)功能:鼠標(biāo)左鍵點(diǎn)擊
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def right_click():
"""
函數(shù)功能:鼠標(biāo)右鍵點(diǎn)擊
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN | win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
def left_down():
"""
函數(shù)功能:鼠標(biāo)左鍵按下
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
def left_up():
"""
函數(shù)功能:鼠標(biāo)左鍵抬起
"""
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def right_down():
"""
函數(shù)功能:鼠標(biāo)右鍵按下
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
def right_up():
"""
函數(shù)功能:鼠標(biāo)右鍵抬起
"""
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
二、Ubuntu下模擬實(shí)現(xiàn)1(virtkey實(shí)現(xiàn))
virtkey實(shí)現(xiàn),以獨(dú)占的方式,系統(tǒng)運(yùn)行會中斷,所以不暫時不滿足自己的需求,繼續(xù)探索
Ubuntu下模擬通過virtkey這個庫來實(shí)現(xiàn),所以需要通過以下命令來安裝
sudo apt-get install python3-virtkey
這個庫主要有兩個API
press_keysym/release_keysym
press_unicode/release_unicode
第一個接受keysym作為參數(shù),第二個接受鍵盤的unicode,鍵盤unicode用來模擬字母鍵還是很方便的,但要模擬Ctrl這樣的鍵一直沒找到方法,最終找到了一個關(guān)于keysym的表,解決了問題,表如下
至此,我們可以寫出模擬Ctrl+V的代碼
import virtkey
import time
v = virtkey.virtkey()
v.press_keysym(65507) #Ctrl鍵位
v.press_unicode(ord('v')) #模擬字母V
v.release_unicode(ord('v'))
v.release_keysym(65507)
time.sleep(5)
v.press_keysym(65421) #Enter
v.release_keysym(65421)
三、Ubuntu下模擬實(shí)現(xiàn)2(autoPy實(shí)現(xiàn),多平臺都可以用)
安裝方法:
pip install autopy
模擬按鍵:
at.key.Code類型
(1)F
(2)控制鍵
(3)方向鍵
使用方法:
toggle(key: Code, down: bool, modifiers: List[Modifier], modifier_delay: float=0)
import autopy as at
at.key.toggle(at.key.Code.UP_ARROW,True,[])
at.key.toggle(at.key.Code.UP_ARROW,False,[])
#按 方向鍵↑,向上移動一下
import autopy as at
at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)
print(123)
#當(dāng)at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)執(zhí)行并過了8秒才執(zhí)行這句,相當(dāng)于sleep(8)
at.key.toggle(at.key.Code.CONTROL,False,[at.key.Modifier.CONTROL])
#control鍵保持按下了8秒,關(guān)閉的時候直接關(guān)就行了
PS:注意釋放,要不然會電腦會一直按著那個修飾鍵,直到你終止程序
tap(key:Code, modifiers: List[Modifier], delay: float=0)
import autopy as at
at.key.tap(at.key.Code.CONTROL,[at.key.Modifier.CONTROL],5)
#按住CONTROL鍵保持了10秒
print(123)
#之后又過了5秒才輸出123
at.key.type_string(string:str,wpm:float=0)
import autopy as at
at.key.type_string('Hello123',0)
#Hello123
#快速地打出