一、什么是自动化
自动化是指使用技术手段模拟人工,执行重复性任务。准确率100%,高于人工。
自动化应用场景:
- 自动化测试
- 自动化运维
- 自动化办公
- 自动化游戏
二、pyautogui的使用
先使用 pip install pyautogui 指令安装这个第三方库
2.1 鼠标事件
2.1.1 鼠标移动,鼠标移动时间
import pyautogui as pa
# 鼠标移动 x y
pa.moveTo(100, 100)
# 鼠标移动时间
pa.moveTo(100, 100, 1)
pyautogui.moveTo()函数
参数原型
pyautogui.moveTo(x, y, duration=0.0, _pause=True)
参数解释
x
:目标位置的水平坐标(像素),是必需参数。坐标原点为屏幕左上角,向右为正方向。y
:目标位置的垂直坐标(像素),是必需参数。坐标原点为屏幕左上角,向下为正方向。duration
:可选参数,指定鼠标移动到目标位置所花费的时间(秒),默认值为0.0
,即瞬间移动到目标位置。你可以通过设置该参数,让鼠标以更自然的速度移动。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
2.1.2 鼠标偏移,鼠标偏移时间
import pyautogui as pa
# 鼠标偏移
pa.move(100, 100)
# 鼠标偏移时间
pa.move(100, 100, 1)
pyautogui.move()函数
函数原型
pyautogui.move(xOffset, yOffset, duration=0.0, _pause=True)
参数解释
xOffset
:必需参数,指定鼠标在水平方向上移动的像素数。正值表示向右移动,负值表示向左移动。yOffset
:必需参数,指定鼠标在垂直方向上移动的像素数。正值表示向下移动,负值表示向上移动。duration
:可选参数,指定鼠标完成移动所花费的时间(秒),默认值是0.0
,意味着瞬间移动。你可以设置这个参数,让鼠标以更自然的速度移动。_pause
:可选参数,是一个布尔值,默认值为True
。若设置为True
,函数执行完毕后会暂停一段时间,暂停时长由pyautogui.PAUSE
属性决定;若设置为False
,则不会暂停。
2.1.3 获取鼠标位置,屏幕分辨率
import pyautogui as pa
# 获取屏幕分辨率
x, y = pa.size()
print(x, y)
# 获取当前鼠标的位置
x, y = pa.position()
print(x, y)
pyautogui.size()函数
函数原型
pyautogui.size()
返回值
该函数返回一个包含两个整数的元组
(width, height)
,其中width
是屏幕的宽度,height
是屏幕的高度。
pyautogui.position()函数
函数原型
pyautogui.position()
返回值
该函数返回一个包含两个整数的元组
(x, y)
,其中x
是鼠标指针的水平坐标,y
是鼠标指针的垂直坐标。坐标原点为屏幕的左上角,水平向右为x
轴正方向,垂直向下为y
轴正方向。
2.1.4 实时获取鼠标当前位置
import pyautogui as pa
x, y = pa.position()
while True:
x1, y1 = pa.position()
if x != x1 or y != y1:
x, y = x1, y1
print(x, y)
2.1.5 鼠标点击,鼠标点击次数
import pyautogui as pa
pa.click(441, 123)
pyautogui.click()函数
函数原型
pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, _pause=True)
参数解释
x
、y
:可选参数,指定鼠标点击的屏幕坐标位置。如果不提供这两个参数,默认在鼠标当前位置进行点击。clicks
:可选参数,指定点击的次数,默认值为1
,即单击操作。interval
:可选参数,指定每次点击之间的间隔时间(秒),默认值为0.0
。button
:可选参数,指定使用哪个鼠标按键进行点击,取值可以是'left'
(左键,默认值)、'middle'
(中键)或'right'
(右键)。duration
:可选参数,指定鼠标移动到点击位置所花费的时间(秒),默认值为0.0
,即瞬间移动到目标位置。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
2.1.6 鼠标按住,抬起
# 鼠标按住 button=右键right,中键middle
pa.mouseDown()
# 鼠标抬起
pa.mouseUp()
pyautogui.mouseDown()函数
函数原型
pyautogui.mouseDown(x=None, y=None, button='left', _pause=True)
参数解释
x
、y
:可选参数,指定鼠标按下的屏幕坐标位置。如果不提供这两个参数,默认在鼠标当前位置按下按键。button
:可选参数,指定按下的鼠标按键,取值可以是'left'
(左键,默认值)、'middle'
(中键)或'right'
(右键)。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
pyautogui.mouseUp()函数
函数原型
pyautogui.mouseUp(x=None, y=None, button='left', _pause=True)
参数解释
x
、y
:可选参数,指定鼠标释放的屏幕坐标位置。如果不提供这两个参数,默认在鼠标当前位置释放按键。button
:可选参数,指定释放的鼠标按键,取值可以是'left'
(左键,默认值)、'middle'
(中键)或'right'
(右键)。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
2.1.7 鼠标滑轮滚动
# 鼠标滑动
# 正数往上滑动 负数往下滑动
pa.scroll(-3000)
pyautogui.scroll()函数
函数原型
pyautogui.scroll(clicks, x=None, y=None, _pause=True)
参数解释
clicks
:这是一个必需参数,用于指定滚动的 “步数” 或 “刻度”。正数表示向上滚动,负数表示向下滚动。滚动幅度大小可能因操作系统和应用程序而异。x
、y
:可选参数,指定滚动操作发生的屏幕坐标位置。若不提供,默认在鼠标当前位置进行滚动。_pause
:可选参数,为布尔值,默认值是True
。若设置为True
,函数执行完成后会暂停一段时间,暂停时长由pyautogui.PAUSE
属性决定;若设置为False
,则不会暂停。
2.2 键盘事件
2.2.1 键盘输入,间隔时间
# 键盘输入 不支持中文
pa.write('qwrewrsfdfs')
pyautogui.write()函数
函数原型
pyautogui.write(message, interval=0.0, _pause=True)
参数解释
message
:必需参数,代表要输入的文本内容,可以是字符串。interval
:可选参数,指定每个字符输入之间的间隔时间(秒),默认值为0.0
,即尽可能快地输入。你可以通过设置该参数来控制输入速度,使输入看起来更自然。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
2.2.2 按键输入,次数,间隔
# 按键输入
pa.press('enter')
pyatuogui.press()函数
函数原型
pyautogui.press(keys, presses=1, interval=0.0, _pause=True)
参数解释
keys
:必需参数,可以是单个按键名称的字符串,也可以是包含多个按键名称的列表。按键名称可以是字母(如'a'
、'b'
)、数字(如'1'
、'2'
)、特殊字符(如'space'
表示空格、'enter'
表示回车键)等。完整的按键名称列表可以参考pyautogui
文档。presses
:可选参数,指定按键的按下次数,默认值为1
。interval
:可选参数,指定每次按键之间的间隔时间(秒),默认值为0.0
。_pause
:可选参数,是一个布尔值,默认值为True
。如果设置为True
,在函数执行完成后会暂停一段时间,该暂停时间由pyautogui.PAUSE
属性决定;如果设置为False
,则不会暂停。
2.2.3 组合按键
# 组合按键
pa.hotkey('ctrl', 'v')
pyautogui.hotkey()函数
函数原型
pyautogui.hotkey(*keys, interval=0.0, _pause=True)
参数解释
*keys
:这是一个可变参数,要求传入多个字符串,每个字符串代表一个按键。函数会按顺序依次按下这些按键,最后再按相反顺序释放这些按键,以此模拟组合键操作。比如,要模拟Ctrl+S
,就传入'ctrl'
和's'
。interval
:可选参数,用于指定按下每个按键之间的间隔时间(秒),默认值是0.0
。_pause
:可选参数,是一个布尔值,默认值为True
。若设置为True
,函数执行完毕后会暂停一段时间,暂停时长由pyautogui.PAUSE
属性决定;若设置为False
,则不会暂停。
2.2.4 更便捷的输出中文
# 更便捷的输出中文
# 导包:import pyperclip
import pyautogui as pa
import time
import pyperclip
pa.click(110, 100)
pa.sleep(2)
a1 = '打发程序员'
pyperclip.copy(a1)
pa.hotkey('ctrl', 'v')
2.2.5 按键按住,抬起
# 按键的按住、抬起
pa.keyDown('shift')
pa.keyUp('shift')
pyautogui.keyDown()函数
函数原型
pyautogui.keyDown(key, _pause=True)
参数解释
key
:必需参数,为字符串类型,表示要按下的按键名称。例如,要按下字母a
,则传入'a'
;若要按下回车键,传入'enter'
。常见的按键名称包括字母、数字、特殊字符(如'space'
代表空格)以及功能键(如'ctrl'
、'alt'
、'shift'
)等。你可以查阅pyautogui
官方文档获取完整的按键名称列表。_pause
:可选参数,布尔值,默认值为True
。若设置为True
,函数执行完毕后会暂停一段时间,暂停时长由pyautogui.PAUSE
属性决定;若设置为False
,则不会暂停。
pyautogui.keyUp()函数
函数原型
pyautogui.keyUp(key, _pause=True)
参数解释
key
:这是必需参数,是一个字符串类型,代表要释放的按键名称。按键名称可以是字母(如'a'
、'b'
)、数字(如'1'
、'2'
)、特殊字符(如'space'
表示空格、'enter'
表示回车键),还有功能键(如'ctrl'
、'alt'
、'shift'
)等。完整的按键名称列表可查阅pyautogui
官方文档。_pause
:属于可选参数,是布尔值,默认值为True
。若设置为True
,函数执行完成后会暂停一段时间,暂停时长由pyautogui.PAUSE
属性决定;若设置为False
,则不会暂停。
2.3 截取屏幕图像
# 截取屏幕图像
# 安装依赖第三方库 Pillow
import pyautogui as pa
# 截取屏幕图像
# 第一个参数传 保存的位置
pa.screenshot('1.png')
pyautogui.screenshot()函数
函数原型
pyautogui.screenshot(region=None, imageFilename=None)
参数解释
region
:可选参数,是一个包含四个整数的元组(left, top, width, height)
。left
和top
分别表示截图区域左上角的坐标,width
和height
分别表示截图区域的宽度和高度。若不指定该参数,默认截取整个屏幕。imageFilename
:可选参数,是一个字符串,代表保存截图的文件名。若指定了该参数,截图会保存到指定文件;若不指定,函数会返回一个PIL
(Python Imaging Library)的Image
对象。
2.4 消息框,输入框
# 消息框,输入框
import pyautogui as pa
import time
# 消息框
# 第一个位置传内容,第二个内容传标题,第三个内容传按钮
pa.alert('程序员', '镖旗')
# 输入框
# 第一个位置传内容,第二个内容传标题,第三个内容传默认输入的内容
a1 = pa.prompt('显示内容', '标题')
print(a1)
pyautogui.alert()函数
函数原型
pyautogui.alert(text='', title='', button='OK')
参数解释
text
:这是可选参数,是一个字符串,代表消息框里要显示的文本内容,默认值为空字符串。title
:同样是可选参数,也是字符串,为消息框的标题,默认值为空字符串。button
:还是可选参数,是字符串,指定消息框上按钮的文本,默认值是'OK'
。
pyautogui.prompt()函数
函数原型
pyautogui.prompt(text='', title='', default='')
参数解释
text
:可选参数,是一个字符串,用于指定输入框中显示的提示文本,告知用户需要输入的内容,默认值为空字符串。title
:可选参数,也是字符串,为输入框的标题,默认值为空字符串。default
:可选参数,字符串类型,指定输入框中的默认文本内容,用户可以在此基础上进行修改或直接使用,默认值为空字符串。
三、基于opencv和pyautogui实现图像识别的自动操作
import time
import cv2
import pyautogui
def get_xy(img_model_path):
"""
用来判断游戏画面的点击坐标
:param img_model_path:用来检测的模版图片的路径
:return:
"""
# 将屏幕截图保存
pyautogui.screenshot().save("./pic/screenshot.png")
# 载入截图
img = cv2.imread("./pic/screenshot.png")
# 读取模版的宽度和高度
height, width = img_model_path.shape
# 进行模版匹配
result = cv2.matchTemplate(img, img_model_path, cv2.TM_SQDIFF_NORMED)
# 解析出匹配区域的左上角的坐标
upper_left = cv2.minMaxLoc(result)[2]
# 计算匹配区域右下角的坐标
lower_right = (upper_left[0] + width, upper_left[1] + height)
# 计算中心区域的坐标
avg = (int((upper_left[0] + lower_right[0]) / 2), int((upper_left[1] + lower_right[1]) / 2))
return avg
def auto_click(var_avg):
"""
接受一个元祖参数,自动点击
:param var_avg:
:return:
"""
pyautogui.click(var_avg[0], var_avg[1], button='left')
time.sleep(1)
def routine(img_model_path, name):
avg = get_xy(img_model_path)
print(f'正在点击{name}')
auto_click(avg)