赞
踩
PyAutoGUI是一个纯Python的GUI自动化工具,通过它可以用程序自动控制鼠标和键盘操作。它支持Windows, MacOS和Linux。
安装:
pip install pyautogui
基本用法看代码,非常简单易用。
import pyautogui
pyautogui.click(100, 100)
pyautogui.moveTo(100, 150)
pyautogui.moveRel(0, 10) # 向下移动10个像素
pyautogui.dragTo(100, 150)
pyautogui.dragRel(0, 10) # 向下拖动10个像素
运行脚本的时候,MacOS会提示你打开系统偏好控制,要求允许运行脚本的程序控制电脑,允许即可。
先看一下屏幕坐标系:
import pyautogui
# 自动防故障功能,将鼠标移到屏幕的左上角(坐标为(0,0))
# 以此来抛出failSafeException异常。
pyautogui.FAILSAFE = True
# 判断(x,y)是否在屏幕上
x, y = 50, 100
pyautogui.onScreen(x, y)
# 获取屏幕的宽度和高度
width, height = pyautogui.size()
print(f"屏幕宽度为{width},高度为{height}")
currentMouseX, currentMouseY = pyautogui.position()
# 鼠标当前位置
print(f"鼠标当前位置为({currentMouseX},{currentMouseY})")
import pyautogui
# 鼠标移动到(50,80),duration为持续时间,默认最小值为0.1秒,本例为0.5秒,设定值低于0.1会立即到达目标位置。
pyautogui.moveTo(50, 80, duration=0.5)
# 从当前位置向上/下/左/右移动10个像素
pyautogui.moveRel(10, 0) # 向右
pyautogui.moveRel(0, 10) # 向下
pyautogui.moveRel(-10, 0) # 向左
pyautogui.moveRel(0, -10) # 向上
# 拖放鼠标
# 按住鼠标左键,把鼠标拖拽到(50, 80)位置
pyautogui.dragTo(50, 80, button='left')
# 按住鼠标右键,用2秒钟把鼠标拖拽到(100, 200)位置
pyautogui.dragTo(100, 200, 2, button='right')
# 按住鼠标左键,用0.5秒钟把鼠标向上拖拽100个像素
pyautogui.dragRel(0, -100, duration=0.5)
# 点击鼠标
# pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
# button属性可以设置成left,middle和right,默认是left。
# 鼠标在当前位置单击左键
pyautogui.click()
# 在坐标(50, 80)处点击左键2次,点击时间间隔0.5S
pyautogui.click(50, 80, 2, 0.5, button='left')
# 先移动到(50, 80),移动过程耗时1秒,然后单击左键
pyautogui.click(x=50, y=80, duration=1)
# 鼠标在当前位置双击左键
pyautogui.doubleClick()
# 鼠标在(50,80)位置双击左键
pyautogui.doubleClick(x=100, y=150, button="left")
# 鼠标当前位置三击左键
pyautogui.tripleClick()
# 鼠标键按下和松开(click()实际上是mouseDown()和mouseUp()的组合)
# 按下鼠标左键不放
pyautogui.mouseDown()
# 松开鼠标左键
pyautogui.mouseUp()
# 按下鼠标右键不放
pyautogui.mouseDown(button='right')
# 移动到(100, 200)位置,再松开鼠标右键
pyautogui.mouseUp(button='right', x=50, y=100)
# 滚动鼠标
# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
# 向上滚动5格
pyautogui.scroll(5)
# 向下滚动5格
pyautogui.scroll(-5)
# 鼠标移动到(200,600),然后向上滚动10格
pyautogui.scroll(10, 200, 600)
# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这里是线性缓动/渐变函数。
# 逐渐加速
pyautogui.moveTo(600, 600, 2, pyautogui.easeInQuad)
# 逐渐减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(600, 600, 2, pyautogui.easeInOutQuad)
# 徘徊前进
pyautogui.moveTo(100, 100, 5, pyautogui.easeInBounce)
# 大幅度徘徊前进,甚至超过起点和终点
pyautogui.moveTo(600, 600, 2, pyautogui.easeInElastic)
# 键盘立即输出"Hello world!"
pyautogui.write('Hello world!')
# 键盘输出"Hello world!",每个字符输出时间间隔0.25S
pyautogui.write('Hello world!', interval=0.25)
pyautogui.press('enter') # 按下 回车键
pyautogui.press('f1') # 按下 F1键
pyautogui.press('left') # 按下 左箭头
# 连续按下三次左箭头可以有如下两种方式:
pyautogui.press(['left', 'left', 'left'])
pyautogui.press('left', presses=3)
# press()实际上是keyDown()和keyUp()的组合
# 按"shift+left"三次
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
# hold()函数
# 按"shift+left"三次的hold()用法
with pyautogui.hold('shift'):
pyautogui.press(['left', 'left', 'left'])
# hotkey()组合键
# 正序依次按下按键,然后逆序依次松开,例如“粘贴(ctrl+v)”
pyautogui.hotkey('ctrl', 'v')
# 相当于
pyautogui.keyDown('ctrl')
pyautogui.keyDown('v')
pyautogui.keyUp('v')
pyautogui.keyUp('ctrl')
完整键盘参数看这里:KEYBOARD_KEYS
一共有四种类型,用法比较简单,请参照下面的例子:
pyautogui.alert(text='这是一个警告消息框', title='警告消息', button='OK')
pyautogui.confirm(text='这是一个确认消息框', title='确认', buttons=['OK', 'Cancel'])
pyautogui.prompt(text='这是一个提示消息框', title='提示' , default='请输入地址')
pyautogui.password(text='请输入密码', title='密码', default='', mask='*')
屏幕截图相关方法依赖Pillow
模块。MacOS使用系统自带的screencapture
命令;Linux使用scrot
命令,需要通过sudo apt-get install scrot
安装。
# 全屏截图(1080p大概耗时100ms)
im1 = pyautogui.screenshot()
im2 = pyautogui.screenshot('my_screenshot.png')
# 区域截图(提供左上、右下两个点坐标即可)
im = pyautogui.screenshot(region=(0,0, 300, 400))
# 获取某个点的RGB值,可以有如下两种方法:
# 1. 先截图,然后使用getpixel()方法
im = pyautogui.screenshot()
rgb = im.getpixel((300, 400))
print(rgb) #返回(30, 30, 30, 255)
# 2. 直接使用pixel()方法,是上面两个方法的组合
pix = pyautogui.pixel(300, 400)
print(pix) # 返回 RGB(red=30, green=30, blue=30)
# 验证某个像素的颜色
pyautogui.pixelMatchesColor(100, 200, (130, 135, 144))
# 找到一个图像并在它的中间位置点击鼠标
# confidence置信度可选,需要opencv支持
import pyautogui
import cv2
# 在屏幕上进行一个区域截图
img = pyautogui.screenshot('my_screenshot.png',region=(5, 10, 100, 100))
# 在屏幕上查找这个截图,置信度0.85
imglocation = pyautogui.locateOnScreen('my_screenshot.png', confidence=0.85)
# 屏幕打印应该返回imlocation: Box(left=5, top=8, width=100, height=100)
print('imlocation:',imlocation)
# 获取找到的图像中心位置坐标
imgcenterpoint = pyautogui.center(imglocation)
# 鼠标点击图像中心位置(坐标使用(imgcenterpoint[0],imgcenterpoint[1]也可以))
pyautogui.click(imgcenterpoint.x, imgcenterpoint.y)
参考资料:
Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。