python通过pyautogui库来控制鼠标和键盘

前言

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会提示你打开系统偏好控制,要求允许运行脚本的程序控制电脑,允许即可。

1. 关于屏幕和鼠标位置

先看一下屏幕坐标系:
在这里插入图片描述

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})")

2. 鼠标移动、拖拽、点击、滚动和运动

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)

3. 使用键盘

# 键盘立即输出"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

4. 消息框

一共有四种类型,用法比较简单,请参照下面的例子:

pyautogui.alert(text='这是一个警告消息框', title='警告消息', button='OK')
pyautogui.confirm(text='这是一个确认消息框', title='确认', buttons=['OK', 'Cancel'])
pyautogui.prompt(text='这是一个提示消息框', title='提示' , default='请输入地址')
pyautogui.password(text='请输入密码', title='密码', default='', mask='*')

5. 屏幕截图

屏幕截图相关方法依赖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))

6. 图像识别定位

# 找到一个图像并在它的中间位置点击鼠标
# 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

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值