PyAutoGUI实现自动化控制示例代码(含屏幕自适应)

时间:2023-04-06 10:14:52

PyAutoGUI自动化控制库的使用

PyAutoGUI是一个Python自动化控制库,可以用于控制键盘和鼠标的输入,以及获取屏幕截图和像素点信息等操作。在本篇博客中,我们将介绍如何使用PyAutoGUI来实现自动化控制,并以代码示例的形式展现其基本用法。

安装PyAutoGUI

在使用PyAutoGUI前,我们需要先安装它。可以使用pip命令来完成PyAutoGUI的安装,具体方法如下:

pip install pyautogui

获取屏幕尺寸和鼠标位置

在使用PyAutoGUI时,需要先获取屏幕的尺寸和鼠标当前的位置。可以通过以下代码来实现:

import pyautogui

dpi_x = pyautogui.size()[0]  # 长 默认2240
dpi_y = pyautogui.size()[1]  # 高 默认1400

x, y = pyautogui.position()

其中,pyautogui.size()函数可以获取屏幕的尺寸,返回一个元组(width, height),其中width表示屏幕的宽度,height表示屏幕的高度。pyautogui.position()函数可以获取鼠标当前的位置,返回一个元组(x, y),其中x表示鼠标的水平位置,y表示鼠标的垂直位置。

像素点坐标和RGB值转换

在获取到鼠标当前的位置后,可以通过以下代码来实现像素点坐标和RGB值的转换:

rgb = pyautogui.screenshot().getpixel((x, y))

pyautogui.screenshot()函数可以获取屏幕的截图,并返回一个PIL.Image.Image对象。getpixel()方法可以获取该图片中指定坐标(x, y)处的像素点的RGB值,返回一个元组(r, g, b),其中r表示红色通道的值,g表示绿色通道的值,b表示蓝色通道的值。

自动进行坐标换算

由于不同的设备可能具有不同的屏幕尺寸和分辨率,因此需要进行坐标换算,使得不同设备上的自动化控制效果一致。可以使用以下代码来实现自动进行坐标换算:

x_radio = dpi_x / 2240  # 自动进行坐标换算
y_radio = dpi_y / 1400

x = x / x_radio
y = y / y_radio

其中,x_radioy_radio表示横向和纵向的比例因子,分别计算为屏幕宽度或高度除以默认尺寸(2240x1400)。通过将鼠标当前位置的坐标除以对应的比例因子,可以实现自动进行坐标换算。

完整代码

以下是一个使用PyAutoGUI实现自动化控制的完整示例代码:

import pyautogui
import time

if __name__ == "__main__":
    dpi_x = pyautogui.size()[0]  # 长 默认2240
    dpi_y = pyautogui.size()[1]  # 高 默认1400

    x_radio = dpi_x / 2240  # 自动进行坐标换算
    y_radio = dpi_y / 1400

    print("\r\nx和y方向的像素点:", dpi_x, dpi_y)
    print("\r\nx和y方向的像素点和2240 1400的比例:", x_radio, y_radio)
    while 1:
        try:
            time.sleep(1)
            x, y = pyautogui.position()
            rgb = pyautogui.screenshot().getpixel((x, y))
            posi = 'x:' + str(x).rjust(4) + ' y:' + str(y).rjust(4) + '  RGB:' + str(rgb)
            if PC_COM == 1:
                print('\r', posi)

            x = x / x_radio
            y = y / y_radio
            posi = 'x:' + str(int(x)).rjust(4) + ' y:' + str(int(y)).rjust(4) + '  RGB:' + str(rgb)
            if PC_COM == 0:
                print('\r', posi)
        except:
            print("error")

这段代码是一个无限循环,每隔1秒获取一次鼠标的位置和对应像素点的RGB值,并进行坐标换算。如果PC_COM变量的值为1,则在控制台输出坐标和RGB值;如果PC_COM变量的值为0,则在控制台输出换算后的坐标和RGB值。