Python自动化之跨平台GUI利器PyAutoGUI

文章目录

  • 前言
  • 一、鼠标
    • 1.1 鼠标坐标
    • 1.2 鼠标移动
    • 1.3 鼠标拖动
    • 1.4 鼠标点击
    • 1.5 鼠标按下、抬起
    • 1.6 鼠标滚动
  • 二、键盘
    • 2.1 键盘输入
    • 2.2 键盘按键
    • 2.3 键盘复合键简化
    • 2.4 键盘按键字符大全
  • 三、弹窗
    • 3.1 alert
    • 3.2 confirm
    • 3.3 prompt
    • 3.4 password
  • 四、屏幕
    • 4.1 屏幕坐标
    • 4.2 屏幕大小
    • 4.3 截屏
    • 4.4 图片位置
    • 4.5 像素
  • 五、配置和常用代码
    • 5.1 配置
    • 5.2 常用代码块
  • 参考

前言

PyAutoGUI是一个跨平台GUI自动化Python模块,用于用编程方式控制鼠标和键盘,不仅支持 Windows, 还支持Linux、MAC。

  • github 地址:https://github.com/asweigart/pyautogui
  • 文档地址:https://pyautogui.readthedocs.io/en/latest/
  • 中文文档:https://github.com/asweigart/pyautogui/blob/master/docs/simplified-chinese.ipynb

安装方式:

pip install pyautogui

一、鼠标

pyautogui 支持以屏幕左上角为原点,往右为X轴正方向,向下为Y轴正方向的坐标系

1.1 鼠标坐标

x,y = pyautogui.position()

1.2 鼠标移动

pyautogui.moveTo(100, 200) 

pyautogui.moveTo(None, 500)
pyautogui.moveTo(600, None)

pyautogui.moveTo(100, 200, 2)

pyautogui.move(0, 50)
pyautogui.move(0, 50, 2)

moveTo 函数会将鼠标移动到指定坐标,

  • x,y:XY坐标,如果有None,则会保持相应为None的坐标,移动另一项坐标。
  • 第三个参数 during 是延迟时间,单位为秒。默认是即时。

move 函数是移动相对应坐标的像素点,向右或向下移动,为负数时则是相反方向。同样支持延迟时间这个参数

1.3 鼠标拖动

pyautogui.dragTo(100, 200, button='left')
pyautogui.dragTo(300, 400, 2, button='left')

pyautogui.drag(30, 0, 2, button='right')

dragTo 函数支持鼠标拖动到指定坐标

  • x,y:XY坐标

  • duration: 支持延迟参数。

  • button: 支持选择鼠标的左键、中键或右键

1.4 鼠标点击

pyautogui.click()
pyautogui.click(x=100, y=200)
pyautogui.click(button='right')
pyautogui.click(clicks=2)
pyautogui.click(clicks=2, interval=0.25)
pyautogui.click(button='right', clicks=3, interval=0.25)

pyautogui.doubleClick()
pyautogui.tripleClick()
pyautogui.rightClick()

click函数默认当前鼠标位置左键点击,

  • x,y:XY坐标表示移动到给定坐标再点击
  • button:选择left,right,middle
  • clicks:点击次数
  • interval:点击间隔

1.5 鼠标按下、抬起

鼠标点击和拖动是由鼠标按下和鼠标抬起两部分组成。如果想单独控制这两部分,可以用下面的函数

pyautogui.mouseDown(button='right')
pyautogui.mouseUp(button='right', x=100, y=200)

1.6 鼠标滚动

pyautogui 支持鼠标中键进行滚动,scroll 是垂直滚动。在MAC和Linux 还支持水平滚动 hscroll

pyautogui.scroll(10, x=100, y=100)

pyautogui.hscroll(10)

二、键盘

2.1 键盘输入

可以通过write输入单字符按键,不能输入Shift/Alt这种按键

pyautogui.write('Hello world!', interval=0.25)

2.2 键盘按键

press 表示按下键盘上的按键,press其实可以由 keyDown按下和keyUp抬起组成,当使用组合键时,可以搭配使用

pyautogui.press('enter')

pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left'])
pyautogui.keyUp('shift')

pyautogui.press('left', presses=3)

2.3 键盘复合键简化

pyautogui.keyDown('shift')
pyautogui.press(['left', 'left', 'left'])
pyautogui.keyUp('shift')
# 简化为
with pyautogui.hold('shift'):
	pyautogui.press('left', presses=3)

    
pyautogui.keyDown('ctrl')
pyautogui.keyDown('shift')
pyautogui.keyDown('esc')
pyautogui.keyUp('esc')
pyautogui.keyUp('shift')
pyautogui.keyUp('ctrl')
# 简化为
pyautogui.hotkey('ctrl', 'shift', 'esc')

2.4 键盘按键字符大全

上面 shift, esc 都可以用于表示键盘的按键,能够用于表示按键的字符可以见文档:https://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys

三、弹窗

PyAutoGUI 利用 PyMsgBox 中的消息框函数提供跨平台、纯Python方式来显示JavaScript风格的消息框。提供了四个消息框.

3.1 alert

显示一个带有文本和一个确定按钮的简单消息框。返回单击的按钮的文本。

pyautogui.alert(text='这是弹窗', title='alert弹窗', button='OK')

3.2 confirm

显示带有按钮的消息框。返回单击的按钮的文本。

pyautogui.confirm(text='Yes or No?', title='confirm弹窗', buttons=['Yes', 'No'])

3.3 prompt

显示带有文本输入的消息框和“确定和取消”按钮。返回输入的文本,如果单击“取消”,则返回None。

pyautogui.prompt(text='输入姓名个数', title='弹窗', default='1')

3.4 password

显示带有文本输入的消息框和“确定和取消”按钮。键入的字符显示为*。返回输入的文本,如果单击“取消”,则返回None。

pyautogui.password(text='输入密码', title='弹窗', default='', mask='*')

四、屏幕

4.1 屏幕坐标

判断坐标是否位于屏幕上

pyautogui.onScreen(1000, 100)

4.2 屏幕大小

返回屏幕分辩率大小

pyautogui.size()

4.3 截屏

可通过screenshot 函数进行截屏,还可以截取固定区域的屏幕,四个参数分别是left, top, width, and height (区域左上角坐标和宽高)

im2 = pyautogui.screenshot('my_screenshot.png')
im = pyautogui.screenshot('my_screenshot.png', region=(0,0, 300, 400))

4.4 图片位置

如果你有一个图像文件,你就可以在屏幕上直观地找到它,可以通过locateOnScreen 用于判断 图片在屏幕中的位置。

  • confidence 是置信度,0-1,可通过配置此参数忽略一些像素差异
  • region 是区域
  • grayscale 灰度匹配,默认False,为True可加快速度,但可能造成 false-positive

如果没找到,从 0.9.41版本开始会抛出 ImageNotFoundException 异常,之前是返回None。

找到会返回第一个找到的图像:一个4位整数元祖(left, top, width, height)表示的区域

此外,还有一些常用的函数

  • center 可获取区域的中心点

  • locateCenterOnScreen 会将locateOnScreen、center两者操作合一

  • locateAllOnScreen:会返回所有满足的图像

  • locate:在图片haystackImage中查找needleImage,而不是从屏幕里

  • locateAll:返回所有满足的图像

location=pyautogui.locateOnScreen('calc7key.png')
pyautogui.locateOnScreen('calc7key.png', confidence=0.9, region=(0,0, 300, 400))

pyautogui.center(location)
pyautogui.locateCenterOnScreen('calc7key.png')

locateAllOnScreen(image, grayscale=False)
locate(needleImage, haystackImage, grayscale=False)
locateAll(needleImage, haystackImage, grayscale=False)

4.5 像素

# 获取位置像素
im = pyautogui.screenshot()
pix = im.getpixel((100, 200))

pix = pyautogui.pixel(100, 200)

# 位置匹配像素,返回True/False
pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))

五、配置和常用代码

5.1 配置

# 所有pyautogui的指令都要暂停一秒,这样做,可以防止键盘鼠标操作太快
pyautogui.PAUSE = 1
# 默认为True, 这项功能意味着:当鼠标的指针在屏幕的最左上方,程序会抛异常 pyautogui.FailSafeException,目的是为了防止程序无法停止
pyautogui.FAILSAFE = True

5.2 常用代码块

  • 复制粘贴

    pyautogui.hotkey('ctrl', 'c') 
    pyautogui.hotkey('ctrl', 'v') 
    
  • 屏幕定位图片

    try:
    	imagePosition = pyautogui.locateOnScreen('image0.png', confidence=0.9)
    	if imagePosition:
    		pass
    	else:
    		pass
    except ImageNotFoundException:
    	pass
    

参考

  1. https://pyautogui.readthedocs.io/en/latest/index.html

你可能感兴趣的:(github,software,python,python,自动化,gui,pyautogui,跨平台)