python3 -m pip install pyautogui
windows直接就能装0.9.50,而linux上出现了大问题。
问题:最新版0.9.50(2020//07/31)
这个是下载pyscreeze
期间出现了问题。
那就手动下
python3 -m pip install pyscreeze
以此类推,pygetwindow
、PyTweening
、pymsgbox
……
但卡死在pyobjc
和puobjc-core
上。
一般都是最新版的包不行,就降低版本安装
python3 -m pip install PyAutoGUI==0.9.33
import pyautogui as pg
>>> pg.size()
(1920, 1080)
>>> pg.position()
(11, 6)
注意:屏幕最左边(x的最小值)是0,屏幕最右边(x的最大值)是1919(pg.position()[0] - 1
)。
>>> pg.moveTo(100,50)
不用担心越界报错:
(0, 0)
,会抛出FailSafeException
。Python移动鼠标、点击键盘非常快,当你想要关闭时,如果鼠标还在自动操作,就很难在程序窗口关闭它。为了能够及时中断,PyAutoGUI提供了一个保护措施FailSafeException
。
pg.FAILSAFE = True
时:(0, 0)
,PyAutoGUI函数就会产生pg.FailSafeException
异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。pg.FAILSAFE = False
pg.moveRel(xOffset=None, yOffset=10,duration=0.0, tween=pyautogui.linear)
>>> pg.moveRel(0,100) # x不动,y+=100
>>> pg.moveRel(None,100) # x不动,y+=100
>>> pg.moveRel(-100,-100) # x-=100,y+=100
也不用担心越界,自动归0或最大值。
# 坐标x,坐标y,时间秒,移动方式
>>> pg.moveTo(1800, 500, duration=2, tween=pg.easeInOutQuad)
pyautogui.scroll(clicks)
鼠标当前位置滚轮滚动:它只接受一个整数。如果值为正往上滚,值为负往下滚。
>>> pg.scroll(-100) # 向下滚动
# 左键单击当前位置
>>> pg.click()
# 右键单击当前位置
>>> pg.click(button='right')
>>> pyautogui.rightClick()
# 中键单击当前位置
>>> pyautogui.middleClick()
pg.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
x,y
是要点击的位置,默认是鼠标当前位置clicks
是点击次数interval
是间隔时间,秒button
是要点击的按键,有三个可选值:‘left’
, ‘middle’
, ‘right’
duration
是持续时间tween
是方式pg.doubleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
# 左键双击当前位置
>>> pg.doubleClick()
pg.tripleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)
从当前位置拖拽到绝对位置
pg.dragTo(x=None, y=None, duration=0, button='left', mouseDownUp=True)
>>> pg.dragTo(x=427, y=535, duration=3)
pg.dragTo(xOffset=None, yOffset=None, duration=0, button='left', mouseDownUp=True)
>>> pg.dragRel(100, 100, duration=1)
pg.mouseDown(x=None, y=None, button='left', duration=0)
pg.mouseUp(x=None, y=None, button='left', duration=0)
pg.mouseDown();
# 鼠标移动到x=2745, y=778位置松开(与mouseDown组合使用选中)
pg.mouseUp(x=2745, y=778, button='left', duration=5)
pg.typewrite('XXX')
# 打字:快速输入
pg.typewrite('Hello world!')
# 打字:内容,打每个字间隔的时间秒
pg.typewrite('Hello world!', interval=0.25)
PS:不能识别中文,会跳过中文。pg.typewrite('你好world!')
的结果是world!
pg.typewrite([''])
:没有特殊意思的无效!
pg.typewrite(['','',...])
:这不是同时的ctrl+shift那种,而是接连的,按完Ctrl松开,再按shift松开。
pg.typewrite(['enter'])
pg.typewrite(['left','enter','left'])
特殊字符
'''
'enter'(或'return' 或 '\n') 回车
'esc' ESC键
'shiftleft', 'shiftright' 左右SHIFT键
'altleft', 'altright' 左右ALT键
'ctrlleft', 'ctrlright' 左右CTRL键
'tab' ('\t') TAB键
'backspace', 'delete' BACKSPACE 、DELETE键
'pageup', 'pagedown' PAGE UP 和 PAGE DOWN键
'home', 'end' HOME 和 END键
'up', 'down', 'left','right' 箭头键
'f1', 'f2', 'f3'…. F1…….F12键
'volumemute', 'volumedown','volumeup' 静音、音量+、音量-
'pause' PAUSE
'capslock', 'numlock','scrolllock' CAPS LOCK, NUM LOCK, 和 SCROLLLOCK 键
'insert' INS或INSERT键
'printscreen' PRTSC 或 PRINT SCREEN键
'winleft', 'winright' Win键
'command' Mac OS X command键
'''
# 按下抬起
pg.press('esc')
# 连按
pg.press(['left', 'left', 'left', 'left', 'left', 'left'])
# 按下
pg.keyDown('shift')
# 抬起
pg.keyUp('shift')
# 组合键(同时):接收多个字符串参数,顺序按下,再反序释放
pg.hotkey('ctrl', 'c')
e.g.
pyautogui.hotkey('ctrl','c') #按住Ctrl键,然后按C键,然后释放C键和Ctrl键
# 相当于
pyautogui.keyDown('ctrl')
pyautogui.keyDown('c')
pyautogui.keyUp('c')
pyautogui.keyUp('ctrl')
# float或int时间(秒),为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
pyautogui.PAUSE = 2.5
# 还没存储
im1 = pg.screenshot()
# 这才存储
im1.save('my_screenshot.png')
# 直接存储
im2 = pg.screenshot('my_screenshot2.png')
类型是PIL.Image.Image
,可以和matplotlib.pyplot
交互。
import pyautogui as pg
import matplotlib.pyplot as plt
im1 = pg.screenshot()
plt.imshow(im1)
plt.show()
im = pg.screenshot(region=(0, 0, 300 ,400))
如不存在,则返回None
。实战的时候注意判断是否为None。
pg.locateOnScreen('folder.png')
使用名字orpg.locateOnScreen(im)
使用变量
pg.center(coords)
import pyautogui as pg
# 300,400是偏移量,而不是坐标
im1 = pg.screenshot(region=(0, 0, 300 ,400))
im1.save('folder.png')
# 在当前屏幕中查找指定图片(图片需要由系统截图功能截取的图)
# 结果Box(left=1740, top=360, width=126, height=152)
coords = pg.locateOnScreen('folder.png') # coords = pg.locateOnScreen(im1)
# 获取定位到的图中间点坐标
center = pg.center(coords)
# Point(x=1803, y=436)
pg.locateCenterOnScreen('folder.png')
使用名字orpg.locateCenterOnScreen(im)
使用变量
center = pg.locateCenterOnScreen('folder.png')
# Point(x=1803, y=436)
pg.alert(text=None, title=None)
>>> pg.alert() # 空的
>>> pg.alert('This is an alert box.', 'Test')
特性:阻塞式,点击’确定’后才继续后面的内容
用途:可以用在需要程序敏感的地方(开始程序、确认继续进行之类、防止无限循环)
# 不管点击确定还是点击X关闭,都是返回'OK'
res = pg.alert('This is an alert box.', 'Test')
if res == 'OK':
print('always is OK')
else:
print(res)
pg.confirm(text=None, title=None, buttons=None)
>>> py.confirm()
# 点击'确定',返回'OK'
# 点击'取消'和X关闭,都返回'Cancel'
>>> py.confirm('Text', 'Title', ['A','B'])
# 点击哪个按钮返回哪个字符串,如A→'A'
# 点击X关闭,返回None(不是空字符串'')
pg.prompt(text=None, title=None)
>>> pg.prompt()
# 输入什么点击OK就返回什么,空则返回空字符串''
# Cancel和X关闭都是None
>>> pg.prompt('Text', 'Title')
pg.password(text=None, title=None)
>>> pg.password()
# 输入什么点击OK就返回什么,空则返回空字符串''
# Cancel和X关闭都是None
>>> pg.password('Text', 'Title')
PyAutoGUI 简介