pyautogul这个模块是用来模拟用户操作的模块,他可以模拟你的鼠标键盘等操作。可以说他是对我们个人而言最实用的库了。(玩游戏再也不用重复无聊的操作,被迫做打工仔了)
python -m pip install -U pyautogui
import pyautogul
pyautogui.PAUSE=秒数
获取当前的坐标等信息
In [1]: import pyautogui
In [2]: pyautogui.size() # 获取屏幕尺寸(分辨率×分辨率)
Out[2]: Size(width=1920, height=1080)
In [3]: pyautogui.position() # 获取鼠标当前位置
Out[3]: Point(x=846, y=437)
In [4]: pyautogui.onScreen(100,200) # 判断坐标是否在屏幕范围内
Out[4]: True
In [5]: pyautogui.onScreen(100,2000) # 判断坐标是否在屏幕范围内
Out[5]: False
实践:
import pyautogui as pg
print(pg.size())
print(pg.position())
print(pg.onScreen(100,100))
print(pg.onScreen(40,9100))
输出
Size(width=1920, height=1080)
Point(x=763, y=319)
True
False
鼠标移动包括了相对移动和绝对移动
In [7]: sizex,sizey=pyautogui.size() # 保存屏幕尺寸 # 绝对位置移动,移动至屏幕正中心,鼠标移动过渡时间duration设为1秒 In [9]: pyautogui.moveTo(sizex/2,sizey/2,duration=1) # 相对位置移动,向右100、向上200,鼠标移动过渡时间duration设为0.5秒 In [10]: pyautogui.moveRel(100, -200, duration=0.5)
鼠标点击,一个click()
函数把点鼠标的活包干,过程也可分解为mouseDown()
、mouseUp()
;另有在click()
之上封装的rightClick()
、middleClick()
、doubleClick()
、tripleClick()
等函数。
方便快捷的click
# 移动至屏幕中心点击一下左键,过渡时间0.5秒
In [16]: pyautogui.click(sizex/2,sizey/2, duration=0.5)# 不指定x、y,在当前位置点击一下右键
In [17]: pyautogui.click(button='right')# 移动至(100,100)点击3次左键,点击间隔0.1s,鼠标移动过渡时间0.5秒
In [18]: pyautogui.click(100,100, clicks=3,interval=0.1,duration=0.5)# 移动至(100,100)点击2次右键,点击间隔0.5s,鼠标移动过渡时间0.2秒
In [19]: pyautogui.click(100,100, clicks=2,interval=0.5,button='right',duration=0.2)
双击按键
#双击左键
pyautogui.doubleclick(x,y)
#双击右键
pyautogui.rightclick(x,y)
#双击滚轮
pyautogui.middleclick(x,y)
按键拆解
#鼠标按下
pyautogui.mouseDown()
#鼠标抬起
pyautogui.mouseUp()
# 将鼠标从当前位置拖至屏幕中心,默认左键 In [32]: pyautogui.dragTo(sizex/2,sizey/2) # 将鼠标从当前位置向左100像素、向右200像素拖动,过渡时间0.5秒,指定右键 In [33]: pyautogui.dragRel(-100,200,duration=0.5,button='right')
# 鼠标位置不动
这个不太好用,基本上多大的数字都移动一小段距离,而且有些情况还不运动。
非要用的话还是建议直接控制鼠标点滑动栏,或者设置循环
而且基本上大多数地方都是可以按住中键移动鼠标实现滚动
In [22]: pyautogui.scroll(450)
正数向上,负数向下。
#拖动的同时还按着一个按键(相对位置)
pyautogui.drag(x,y,button='')
#拖动的同时还按着一个按键(绝对位置)
pyautogui.dragto(x,y,button='')
常态的按键模拟
# 键名用字符串表示,支持的所有键名,存在pyautogui.KEYBOARD_KEYS变量中,包括26个字母、数字、符号、F1~F20、方向等等所有按键
In [4]: pyautogui.press('a') # 按字母A键,字母支持大小写# 程序向终端输入了字符a,若程序运行时输入法为中文状态,由于没有继续输入空格或回车,输入法仅列出候选字,并不会输入到终端
In [5]: a# 传入键名列表(按键p、按键y、空格),按键之间间隔0.1秒(默认0)
In [6]: pyautogui.press(['p','y','space'], interval=0.1)# 运行前将输入法切换到中文状态,往终端直接输入了“培养”
In [7]: 培养# typewrite方式一:传入字符串,不支持中文字符,因为函数无法知道输入法需要什么按键才能得到中文字符
In [9]: pyautogui.typewrite('hello, PyAutoGUI!\n')# 程序把字符串"'hello, PyAutoGUI!"和换行符输入到了终端
In [10]: hello, PyAutoGUI!
...:# typewrite方式二:传入键名列表,按键之间间隔0.1秒(默认0)
In [11]: pyautogui.typewrite(['s','r','f','space'], interval=0.1)# 运行前将输入法切换到中文状态,往终端直接输入了“输入法”3个字
In [12]: 输入法# 大小写字母是自动支持的,仍然尝试一次切换到大写
In [13]: pyautogui.typewrite(['capslock','p','y'])# CapsLock按键灯被点亮,程序往终端输入了"PY"
In [14]: PY# hotkey屏蔽了需要反复keyDown、keyUp的细节,参数是任意个键名,而非列表
In [18]: pyautogui.hotkey('ctrl', 'shift', 'esc') #调出任务管理器In [19]:pyautogui.hotkey('alt','ctrl','delete') # 并未调出重启界面
键盘按下和抬起
#模拟按键按下
pyautogui.keyDown()
#模拟按键抬起
pyautogui.keyUp()
#按下多个按键
pyautogui.hotkey('','')
按键可执行的按键:
图片借鉴于【精选】pyautogui库的使用教程(超详细)_QQVQQ...的博客-CSDN博客
他总结的也很详细。我觉得算是现在最好的总结了。
基本上所有的按键都能实现,所以也可以用他来实现一些热键
比如切换输入法,复制粘贴。
按住某个按键
with pyautogui.hold('shift'):
pyautogui.press(['left', 'left', 'left'])
产生一个窗口
In [24]: pyautogui.alert(text='警告',title='PyAutoGUI消息框',button='OK') Out[24]: 'OK' # 点击的按键被返回 In [28]: pyautogui.confirm(text='请选择',title='PyAutoGUI消息框',buttons=['1','2' ...: ,'3']) Out[28]: '2' # 点击的按键被返回 In [30]: pyautogui.prompt(text='请输入',title='PyAutoGUI消息框',default='请输入') Out[30]: 'input by 伪码人' # 点OK按钮后返回输入内容 In [32]: pyautogui.password(text='输入密码',title='PyAutoGUI消息框',default='',mask='*') Out[32]: 'We_Coder' # 点OK按钮后返回输入内容
PyAutoGUI
提供了screenshot()
函数进行屏幕截图,返回是Image
对象,这是在Pillow
库中定义的,因此需要安装Pillow
库才能正常工作。
# imageFilename参数,截图要保存的文件全路径名,默认`None`,不保存; # region参数,截图区域,由左上角坐标、宽度、高度4个值确定,如果指定区域超出了屏幕范围,超出部分会被黑色填充,默认`None`,截全屏 In [41]: pyautogui.screenshot('shot.png',region=(1000,600,600,400)) Out[41]: <PIL.Image.Image image mode=RGB size=600x400 at 0x20C87497390>#返回这个图片在现在屏幕上出现的第一个位置的元组
pyautogui.locateOnScreen('photo.png')
#返回这个图片在屏幕上出现的所有位置(生成器)
pyautogui.locateAllOnScreen('photo.png')
#返回当前图片在屏幕上的中心坐标
pyautogui.locateCenterOnScreen('photo.png')
(本部分我打算后面补充,到时候专门出一个图片识别的)