使用python写按键程序
主要用到的python库是PyAutoGUI,输入一下命令安装即可。
pip install pyautogui
PyAutoGUI官网:https://pyautogui.readthedocs.io/en/latest/
下面做一些功能介绍,介绍部分的内容均来自官网。
部分函数简介
注意:下面函数大部分没有把参数列全,只列了常用的一些参数。
- size():获取显示器的分辨率信息,返回两个整数(width, height)
screenWidth, screenHeight = pyautogui.size()
- position():返回当前鼠标位置信息,也是两个整数(x, y)
- PS:写按键程序的时候经常需要获取坐标信息,很多截图功能附带坐标信息,但假如手边没有趁手的截图工具,那可以用这条命令凑合一下,把鼠标移动到目标位置,然后执行该命令。
currentMouseX, currentMouseY = pyautogui.position()
-
moveTo(x=None, y=None, duration=0.0):移动鼠标到(x, y)位置,duration是指花多长时间移动过去,单位是秒,默认是0,也就是瞬间移动到。
- 注意:如果设置有屏保,瞬移不会刷新屏保的触发时间,也就是说过上一会就回进入屏保状态,如果不想进入屏保,那就要给duration设置个大于0的数值。
-
move(xOffset=None, yOffset=None, duration=0.0):是
moveRel()
函数的替代名称,作用是将鼠标从当前位置出发,移动(xOffset, yOffset)的距离,duration的作用同moveTo
。 -
click(x=None, y=None, clicks=1, interval=0.0, button=PRIMARY, duration=0.0):点击一下,点击的意思就是按下并快速松开。
- 如果设置了(x, y),那就移动到该位置点击,如果不设置(x,y),那就是在当前位置点击一下。
- clicks表示点击次数。
- interval表示点击间隔,当clicks大于1时才有用。
- button表示点击哪个键,取值有[
LEFT
,MIDDLE
,RIGHT
,PRIMARY
,SECONDARY
],PRIMARY和SECONDARY因鼠标设置而不同,对于常用的右手设置,PRIMARY就是左键,而左手鼠标的话,PRIMARY就是右键。 - duration是移动到(x, y)所花的时间。
-
doubleClick(x=None, y=None, interval=0.0, button=LEFT, duration=0.0):
-
leftClick(x=None, y=None, interval=0.0, duration=0.0):左键点击一次,是对
click()
在特定参数下的封装。- 这个函数里的interval比较让人迷惑,因为次数写死了是1,所以interval感觉没什么用。
-
rightClick(x=None, y=None, interval=0.0, duration=0.0):
-
write(message, interval=0.0):是
typewrite()
函数的替代名称,作用是输入一段字符串,即message。 -
keyDown(key):按下一个键。
-
keyUp(key):松开一个键。
-
press((keys, presses=1, interval=0.0):点击按键并松开,注意keys用的是复数,所以它可以是多个值。press相当于一系列keyDown()和keyUp的组合。
- presses:点击次数
- interval:presses的间隔。注意此interval只作用在presses之间,不作用于keys之间。
-
hold(keys):创建一个
按下一系列键
的环境。- keyDown,keyUp,press,hold需要结合例子才比较容易理解,下面一系列代码的效果是等同的,都是实现按下shift的同时点击三次左方向键,然后松开shift。
pyautogui.keyDown('shift') # hold down the shift key pyautogui.press('left') # press the left arrow key pyautogui.press('left') # press the left arrow key pyautogui.press('left') # press the left arrow key pyautogui.keyUp('shift') # release the shift key
pyautogui.keyDown('shift') # hold down the shift key pyautogui.press(['left', 'left', 'left']) pyautogui.keyUp('shift') # release the shift key
with pyautogui.hold('shift'): pyautogui.press(['left', 'left', 'left'])
-
hotKey():按下组合键并松开,组合键以顺序按下,以倒序松开。
pyautogui.hotkey('ctrl', 'c')
-
screenshot(imageFilename=None, region=None):对屏幕进行截屏,返回一个图像,返回的图像是PIL.Image对象。
- region如果是None就对整个屏幕截屏,如果不想截整个屏幕,那么region的格式是4个数字,分别表示(left, top, width, height)
-
scroll(clicks, x=None, y=None):控制鼠标滚轮的滚动。clicks表示滚动次数,如果>0表示向上滚动,如果<0表示向下滚动,(x, y)如果设置的话就移动到该位置并滚动。
pyautogui.scroll(10) # scroll up 10 "clicks" pyautogui.scroll(-10) # scroll down 10 "clicks" pyautogui.scroll(10, x=100, y=100) # move mouse cursor to 100, 200, then scroll up 10 "clicks"
-
FAILSAFE:这不是个函数,该参数的意思是,当把鼠标移动到某个位置时会把程序挂掉(默认是屏幕左上角),该参数的默认设置为(做调试的时候还是很有用的,不然在密集的自动操作下,你可能都没有机会手动终止程序):
FAILSAFE = True FAILSAFE_POINTS = [(0, 0)]
如果担心不小心碰到鼠标让程序挂掉,那就把参数设置成False:
pyautogui.FAILSAFE = False
key的名称列表
跟键盘按键相关的函数,如keyDown(), keyUp(), press(), hotkey()等需要接收key的名称作为参数,key的名称是字符或者字符串,罗列如下:
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']
示例
一个自动刷新网页的小程序如下(仅通过moveTo和leftClick两个函数实现):
注意不同分辨率的屏幕,或者浏览器本身的一些size设置不同的情况下,按钮坐标会不一样,因此可能需要改一下下面POS(position)相关的参数。
# -*- coding: utf-8 -*-
import pyautogui as pg
REFREASH_BUTTON_POS = (93, 62)
WEBPAGE_POS = (
(140, 20),
(380, 20)
)
def refresh_webpage(webpage_position):
x, y = webpage_position
pg.moveTo(x, y, duration=0.5)
pg.leftClick(duration=0.05)
pg.sleep(0.5)
x, y = REFREASH_BUTTON_POS
pg.moveTo(x, y, duration=0.5)
pg.leftClick(duration=0.05)
pg.sleep(0.5)
def main():
pg.FAILSAFE = False
cnt = 0
while True:
cnt += 1
pg.sleep(5)
for pos in WEBPAGE_POS:
refresh_webpage(pos)
pg.sleep(5)
if __name__ == '__main__':
main()