一、什么是自动化
自动化是指使用技术手段模拟人工,执行重复性任务。准确率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 pax, y = pa.position()while True:x1, y1 = pa.position()if x != x1 or y != y1:x, y = x1, y1print(x, y)
2.1.5 鼠标点击,鼠标点击次数
import pyautogui as papa.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 pyperclipimport pyautogui as pa
import time
import pyperclippa.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 截取屏幕图像
# 截取屏幕图像
# 安装依赖第三方库 Pillowimport 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 timeimport cv2
import pyautoguidef 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 avgdef 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)
