当前位置:   article > 正文

Python键鼠控制之PyAutoGUI方法

Python键鼠控制之PyAutoGUI方法

前言

   PyAutoGUI 是一个 Python 库,用于在桌面应用程序中自动化鼠标和键盘操作。它提供了一组简单而强大的方法,使得开发者可以编写脚本来模拟用户的鼠标点击、键盘输入以及屏幕截图等操作。PyAutoGUI 可以用于自动化重复性任务、测试 GUI 应用程序、创建自定义的自动化工具等场景。

以下是 PyAutoGUI 的一些主要特点:

  1. 跨平台性:PyAutoGUI 可以在 Windows、macOS 和 Linux 上运行,并提供了一致的 API接口,使得开发者可以编写跨平台的自动化脚本。
  2. 鼠标和键盘控制:PyAutoGUI 提供了丰富的方法来模拟鼠标移动、点击、拖拽以及键盘输入等操作,使得可以轻松地自动化各种基于 GUI的任务。
  3. 屏幕信息和截图:PyAutoGUI 支持获取屏幕大小、鼠标位置等信息,并可以对屏幕进行截图、图像识别等操作,方便进行自动化任务的处理。
  4. 灵活性和易用性:PyAutoGUI 的方法设计简单直观,使用起来非常方便,同时提供了一些参数来定制操作的行为,满足不同场景下的需求。

PyAutoGUI官方文档

安装命令:pip install pyautogui


一、屏幕信息

   左上角的像素位于坐标 0, 0。如果屏幕的分辨率为 1920 x 1080,则右下角的像素将为 1919, 1079(因为坐标从 0 开始,而不是 1)

0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
import pyautogui

# 获取屏幕尺寸(打印显示的是完整尺寸,操作时,从0开始)
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

二、鼠标操作

  • 实时获取鼠标位置
import pyautogui

print('Press Ctrl-C to quit.')
try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
    print('\n')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 鼠标移动
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 鼠标点击

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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 鼠标双击

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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 鼠标按压释放
import pyautogui

# 鼠标移动代码...

# 模拟按下鼠标按钮,当前是左键。这个函数会让鼠标一直保持按下状态
pyautogui.mouseDown()

# 释放之前按下的鼠标按钮,使其恢复弹起状态
pyautogui.mouseUp()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 鼠标拖动
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 鼠标滚动
import pyautogui

# 鼠标移动代码...

# 向上滚动1000个单位
pyautogui.scroll(1000)

# 向下滚动1000个单位
pyautogui.scroll(-1000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、键盘操作

键盘输入常用的方法:
在这里插入图片描述

  • 获取键盘按键名称方法
import pyautogui

# KEY_NAMES 属性获取了所有键盘按键的名称列表
key_names = pyautogui.KEY_NAMES
print(key_names)
  • 1
  • 2
  • 3
  • 4
  • 5
  • keyDown和keyUp方法
# 模拟按下 Windows 键
pyautogui.keyDown('win')

# 模拟释放 Windows 键(如果有按下,一定记得写释放,否则手动操作键盘可能会存在问题)
pyautogui.keyUp('win')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 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'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • press方法
# 模拟按下和释放 Enter 键
pyautogui.press('enter')

# 模拟按下和释放右键箭头键两次,间隔为0.5秒
pyautogui.press('right', presses=2, interval=0.5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • hotkey方法
# 模拟按下和释放 Ctrl+shift+esc 组合键,打开任务管理器
pyautogui.hotkey('ctrl', 'shift', 'esc')
  • 1
  • 2
  • 组合示例
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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

四、屏幕截图

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

五、定位功能

   pyautogui.locateOnScreen() 是一个在屏幕上查找指定图片的方法。它会比较屏幕截图与给定图片的相似度,然后返回匹配成功的图片位置。你可以使用这个方法来定位屏幕上的特定图片。

  • 图片尽量用系统自带的截图工具进行截图,其他截图工具,可能会导致识别不准,如识别有偏差请设置confidence参数
import pyautogui

# 在屏幕上查找图像并获取位置信息,并设置匹配的置信度阈值为 0.9(取值范围为 0 到 1)confidence可选
location = pyautogui.locateOnScreen('CSDN.png', confidence=0.9)

# 输出位置信息以及位置的左上角坐标
print(location, location[0], location.top)
# 结果:Box(left=396, top=385, width=30, height=25) 396 385
# left=396 表示图像左边缘距离屏幕左侧有 396 个像素
# top=385 表示图像的顶部边缘距离屏幕顶部有 385 个像素

# 计算图像位置的中心点坐标
center = pyautogui.center(location)

# 输出中心点坐标以及 x 坐标
print(center, center[0])
# 结果:Point(x=411, y=397) 411
# x=411 表示中心点的 x 坐标位于屏幕上的第 411 个像素位置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

当前有一个需求,需要在 CSDN 页面对10篇文章进行点赞,那我们应该如何实现这个功能了?

  1. 第一步,CSDN网站账号登录
  2. 第二步,先使用系统工具截取点赞图标
    在这里插入图片描述
  3. 第三步,代码实现
import pyautogui
import time
import webbrowser


def article_likes():
    """定位到点赞按钮点击"""
    count = 10
    while count > 0:
        time.sleep(0.3)
        try:
            location = pyautogui.locateOnScreen('CSDN1.png', confidence=0.7)
            center = pyautogui.center(location)
            pyautogui.click(center)
            print("点赞成功!")
            count -= 1

        except TypeError:
            pyautogui.scroll(-500)
            print('当前页面没有找到目标,页面下翻...')

        except Exception as e:
            print(f"点赞失败:{e}")
            break


if __name__ == "__main__":
    # 通过默认浏览器,打开CSDN网站
    webbrowser.open("https://www.csdn.net/")
    article_likes()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

以上只是介绍了一些常用的方法,如想了解详细的使用方法,请查阅官方文档。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/121130?site
推荐阅读
相关标签
  

闽ICP备14008679号