python库之pyautogui

文章目录

  • 一、安装
    • 1.问题百出
    • 2.成功
  • 二、使用
    • 1.屏幕和鼠标操作
      • 1.1.尺寸
      • 1.2.鼠标位置
      • 1.3.移动鼠标
        • 1.3.1.绝对位置和保护措施FailSafeException
        • 1.3.2.相对位置
        • 1.3.3.缓慢移动
        • 1.3.4.滑动条
      • 1.4.鼠标点击
        • 1.4.1.单击/多次点击
        • 1.4.2.双击
        • 1.4.3.三击
      • 1.5.拖拽
        • 1.5.1.绝对位置
        • 1.5.2.相对位置
        • 1.5.3.手动拖拽
    • 2.键盘
      • 2.1.打字
        • 2.1.1.文本内容
        • 2.1.2.特殊字符
      • 2.2.按键
    • 3.控制速度
    • 4.截图
      • 4.1.全屏和保存
      • 4.2.局部截图
      • 4.3.查图
        • 4.3.1.区域
        • 4.3.2.中心
    • 5.窗口
      • 5.1.alter告示
      • 5.2.confirm选择
      • 5.3.prompt明文输入
      • 5.4.password密码*
  • Reference


一、安装

1.问题百出

python3 -m pip install pyautogui

windows直接就能装0.9.50,而linux上出现了大问题。
问题:最新版0.9.50(2020//07/31)
python库之pyautogui_第1张图片
这个是下载pyscreeze期间出现了问题。
那就手动下

python3 -m pip install pyscreeze

以此类推,pygetwindowPyTweeningpymsgbox……

但卡死在pyobjcpuobjc-core上。

2.成功

一般都是最新版的包不行,就降低版本安装

python3 -m pip install PyAutoGUI==0.9.33

二、使用

import pyautogui as pg

1.屏幕和鼠标操作

1.1.尺寸

python库之pyautogui_第2张图片

>>> pg.size()
(1920, 1080)

1.2.鼠标位置

>>> pg.position()
(11, 6)

注意:屏幕最左边(x的最小值)是0,屏幕最右边(x的最大值)是1919(pg.position()[0] - 1)。

1.3.移动鼠标

1.3.1.绝对位置和保护措施FailSafeException

>>> pg.moveTo(100,50)

不用担心越界报错:

  • x和y都可以比最大值大,效果是x和y的值是其最大值。
  • x和y都可以是负数,效果是x和y的值是0。
    而当x和y都是0时,(0, 0),会抛出FailSafeException

Python移动鼠标、点击键盘非常快,当你想要关闭时,如果鼠标还在自动操作,就很难在程序窗口关闭它。为了能够及时中断,PyAutoGUI提供了一个保护措施FailSafeException

  • (默认开启)当pg.FAILSAFE = True时:
    如果把鼠标光标在屏幕左上角(0, 0),PyAutoGUI函数就会产生pg.FailSafeException异常。如果失控了,需要中断PyAutoGUI函数,就把鼠标光标在屏幕左上角。
  • 要禁用这个特性,就把FAILSAFE设置成False:
pg.FAILSAFE = False

1.3.2.相对位置

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或最大值。

1.3.3.缓慢移动

# 坐标x,坐标y,时间秒,移动方式
>>> pg.moveTo(1800, 500, duration=2, tween=pg.easeInOutQuad)

1.3.4.滑动条

pyautogui.scroll(clicks)
鼠标当前位置滚轮滚动:它只接受一个整数。如果值为正往上滚,值为负往下滚。

>>> pg.scroll(-100)	# 向下滚动

1.4.鼠标点击

1.4.1.单击/多次点击

# 左键单击当前位置
>>> 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是方式

1.4.2.双击

pg.doubleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)

# 左键双击当前位置
>>> pg.doubleClick()

1.4.3.三击

pg.tripleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)

1.5.拖拽

1.5.1.绝对位置

从当前位置拖拽到绝对位置
pg.dragTo(x=None, y=None, duration=0, button='left', mouseDownUp=True)

  • duration:0太快了,可能出现没拉上的效果。起码选个0.5吧。
  • mouseDownUp:True拖拽,False同move。
>>> pg.dragTo(x=427, y=535, duration=3)

1.5.2.相对位置

pg.dragTo(xOffset=None, yOffset=None, duration=0, button='left', mouseDownUp=True)

>>> pg.dragRel(100, 100, duration=1)

1.5.3.手动拖拽

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)

2.键盘

2.1.打字

2.1.1.文本内容

pg.typewrite('XXX')

# 打字:快速输入
pg.typewrite('Hello world!')

# 打字:内容,打每个字间隔的时间秒
pg.typewrite('Hello world!', interval=0.25)

PS:不能识别中文,会跳过中文。pg.typewrite('你好world!')的结果是world!

2.1.2.特殊字符

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键
'''

2.2.按键

# 按下抬起
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')

3.控制速度

# float或int时间(秒),为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
pyautogui.PAUSE = 2.5

4.截图

4.1.全屏和保存

# 还没存储
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()

4.2.局部截图

im = pg.screenshot(region=(0, 0, 300 ,400))

4.3.查图

如不存在,则返回None。实战的时候注意判断是否为None。

4.3.1.区域

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)

4.3.2.中心

pg.locateCenterOnScreen('folder.png')使用名字orpg.locateCenterOnScreen(im)使用变量

center = pg.locateCenterOnScreen('folder.png')
# Point(x=1803, y=436)

5.窗口

5.1.alter告示

pg.alert(text=None, title=None)

>>> pg.alert()	# 空的

>>> pg.alert('This is an alert box.', 'Test')

python库之pyautogui_第3张图片

python库之pyautogui_第4张图片
特性:阻塞式,点击’确定’后才继续后面的内容
用途:可以用在需要程序敏感的地方(开始程序、确认继续进行之类、防止无限循环)

# 不管点击确定还是点击X关闭,都是返回'OK'
res = pg.alert('This is an alert box.', 'Test')
if res == 'OK':
    print('always is OK')
else:
    print(res)

5.2.confirm选择

pg.confirm(text=None, title=None, buttons=None)

>>> py.confirm()
# 点击'确定',返回'OK'
# 点击'取消'和X关闭,都返回'Cancel'

>>> py.confirm('Text', 'Title', ['A','B'])
# 点击哪个按钮返回哪个字符串,如A→'A'
# 点击X关闭,返回None(不是空字符串'')

python库之pyautogui_第5张图片

python库之pyautogui_第6张图片
PS:可以用方向机左右来选择,Enter

5.3.prompt明文输入

pg.prompt(text=None, title=None)

>>> pg.prompt()
# 输入什么点击OK就返回什么,空则返回空字符串''
# Cancel和X关闭都是None

>>> pg.prompt('Text', 'Title')

python库之pyautogui_第7张图片
python库之pyautogui_第8张图片

5.4.password密码*

pg.password(text=None, title=None)

>>> pg.password()
# 输入什么点击OK就返回什么,空则返回空字符串''
# Cancel和X关闭都是None

>>> pg.password('Text', 'Title')

python库之pyautogui_第9张图片

python库之pyautogui_第10张图片


Reference

PyAutoGUI 简介

你可能感兴趣的:(python库)