前言
PyAutoGUI 是一个 Python 库,用于在桌面应用程序中自动化鼠标和键盘操作。它提供了一组简单而强大的方法,使得开发者可以编写脚本来模拟用户的鼠标点击、键盘输入以及屏幕截图等操作。PyAutoGUI 可以用于自动化重复性任务、测试 GUI 应用程序、创建自定义的自动化工具等场景。
以下是 PyAutoGUI 的一些主要特点:
- 跨平台性:PyAutoGUI 可以在 Windows、macOS 和 Linux 上运行,并提供了一致的 API接口,使得开发者可以编写跨平台的自动化脚本。
- 鼠标和键盘控制:PyAutoGUI 提供了丰富的方法来模拟鼠标移动、点击、拖拽以及键盘输入等操作,使得可以轻松地自动化各种基于 GUI的任务。
- 屏幕信息和截图:PyAutoGUI 支持获取屏幕大小、鼠标位置等信息,并可以对屏幕进行截图、图像识别等操作,方便进行自动化任务的处理。
- 灵活性和易用性:PyAutoGUI 的方法设计简单直观,使用起来非常方便,同时提供了一些参数来定制操作的行为,满足不同场景下的需求。
PyAutoGUI官方文档
安装命令:pip install pyautogui
一、屏幕信息
import pyautogui# 获取屏幕尺寸
screen_size = pyautogui.size()
print(screen_size)
# 结果:Size(width=1920, height=1080)width, height = pyautogui.size()
print(width, height)
# 结果:1920 1080# 获取鼠标当前位置
mouse_position = pyautogui.position()
print(mouse_position)
# 结果:Point(x=960, y=540)# 判断坐标是否在屏幕范围内(范围内) onScreen(x, y)
onscreen = pyautogui.onScreen(100, 200)
print(onscreen)
# 结果:True# 判断坐标是否在屏幕范围内(范围外)
onscreen = pyautogui.onScreen(100, 4000)
print(onscreen)
# 结果:False
二、鼠标操作
- 鼠标移动
import pyautogui# 将鼠标移动到屏幕坐标 (x=200, y=300) 的位置,移动过程耗时 1 秒钟
pyautogui.moveTo(200, 300, duration=1)# 相对于当前鼠标位置,向右移动 200 像素,向下移动 500 像素,移动过程耗时 1 秒钟
pyautogui.moveRel(200, 500, duration=1)# 相对于当前鼠标位置,向左移动 200 像素,向上移动 500 像素,移动过程耗时 1 秒钟
pyautogui.moveRel(-200, -500, duration=1)
- 鼠标点击
click(x=None, y=None, button=‘left’, clicks=1, interval=0.0)
模拟鼠标单击操作。如果指定了 (x, y) 坐标,则会先将鼠标移动到该坐标,然后进行单击操作,默认使用左键单击。clicks 参数指定单击次数,interval 指定单击之间的间隔时间。
import pyautogui# 在屏幕坐标 (x=100, y=100) 的位置点击鼠标左键,点击过程耗时 1 秒钟
pyautogui.click(100, 100, duration=1)# 在屏幕坐标 (100, 100) 的位置点击鼠标左键两次
pyautogui.click(100, 100, clicks=2)# 在屏幕坐标 (100, 100) 的位置点击鼠标左键两次,且点击间隔时间为 3 秒钟
pyautogui.click(100, 100, clicks=2, interval=3)# 在屏幕坐标 (100, 100) 的位置点击鼠标左键,使用 button='left' 指定左键
pyautogui.click(100, 100, button='left')# 在屏幕坐标 (100, 200) 的位置点击鼠标右键,使用 button='right' 指定右键
pyautogui.click(100, 200, button='right')# 在屏幕坐标 (100, 300) 的位置点击鼠标中键,使用 button='middle' 指定中键
pyautogui.click(100, 300, button='middle')
- 鼠标双击
doubleClick(x=None, y=None, button=‘left’, interval=0.0)
模拟鼠标双击操作,参数意义与 click() 方法类似。
import pyautogui# 在屏幕坐标 (100, 100) 处进行双击操作,使用的是鼠标左键
pyautogui.doubleClick(100, 100)# 在屏幕坐标 (100, 100) 处进行双击操作,使用的是鼠标右键
pyautogui.doubleClick(100, 100, button='right')# 在屏幕坐标 (100, 100) 处进行双击操作,使用的是鼠标中键
pyautogui.doubleClick(100, 100, button='middle')
- 鼠标按压释放
import pyautogui# 鼠标移动代码...# 模拟按下鼠标按钮,当前是左键。这个函数会让鼠标一直保持按下状态
pyautogui.mouseDown()# 释放之前按下的鼠标按钮,使其恢复弹起状态
pyautogui.mouseUp()
- 鼠标拖动
import pyautogui# 将鼠标光标从当前位置拖动到屏幕上的坐标 (95, 50) 的位置(默认使用左键进行拖动,可以使用参数 button='*' 进行修改)
pyautogui.dragTo(95, 50, duration=1)# 将鼠标光标相对于当前位置向右拖动 500 像素,向下拖动 300 像素,拖动过程持续 1 秒钟
pyautogui.dragRel(500, 300, duration=1)# 将鼠标光标相对于当前位置向左拖动 500 像素,向上拖动 300 像素,拖动过程持续 1 秒钟
pyautogui.dragRel(-500, -300, duration=1)
- 鼠标滚动
import pyautogui# 鼠标移动代码...# 向上滚动1000个单位
pyautogui.scroll(1000)# 向下滚动1000个单位
pyautogui.scroll(-1000)
三、键盘操作
键盘输入常用的方法:
- 获取键盘按键名称方法
import pyautogui# KEY_NAMES 属性获取了所有键盘按键的名称列表
key_names = pyautogui.KEY_NAMES
print(key_names)
- keyDown和keyUp方法
# 模拟按下 Windows 键
pyautogui.keyDown('win')# 模拟释放 Windows 键(如果有按下,一定记得写释放,否则手动操作键盘可能会存在问题)
pyautogui.keyUp('win')
- typewrite方法
# 演示用的浏览器,鼠标移动到浏览器搜索框点击,软件再进行键盘操作
pyautogui.click(145, 60)# 模拟逐个字符地输入字符串,并在每个字符输入之间有 0.1 秒的间隔
pyautogui.typewrite('python', interval=0.1)# 按顺序依次输入列表中的每个元素。'space' 表示空格键
pyautogui.typewrite(['s', 'r', 'f', 'space'], interval=0.2)# 模拟按下回车键
pyautogui.typewrite(['enter'])
- press方法
# 模拟按下和释放 Enter 键
pyautogui.press('enter')# 模拟按下和释放右键箭头键两次,间隔为0.5秒
pyautogui.press('right', presses=2, interval=0.5)
- hotkey方法
# 模拟按下和释放 Ctrl+shift+esc 组合键,打开任务管理器
pyautogui.hotkey('ctrl', 'shift', 'esc')
- 组合示例
import pyautogui
import pyperclip# 演示用的浏览器,鼠标移动到浏览器搜索框点击,软件再进行键盘操作
pyautogui.click(145, 60)"""示例一"""
# 输入 !
pyautogui.keyDown('shift')
pyautogui.press('1')
pyautogui.keyUp('shift')"""示例二"""
# 复制文本到剪贴板中
text_to_copy = "Hello, world!"
pyperclip.copy(text_to_copy)
# 执行粘贴操作
pyautogui.hotkey('ctrl', 'v')
四、屏幕截图
import os
import pyautogui# 定义截图存放路径
folder_path = r'C:\Users\admin\Desktop'
file_path = os.path.join(folder_path, 'screenshot.png')# 对整个屏幕进行截图
screenshot = pyautogui.screenshot()
screenshot.save(file_path)# 对指定区域进行截图
x, y, width, height = 100, 100, 300, 400
region = (x, y, width, height)
screenshot = pyautogui.screenshot(region=region)
screenshot.save(file_path)