学习笔记 解决方案

PyAutoGUI

获取屏幕分辨率

屏幕左上角的位置坐标从0,0开始

.size() 获取屏幕分辨率,返回结果格式如下:Size(width=1920, height=1080)

.position() 获取鼠标位置,返回xy坐标,x是从左到右水平方向,y是从上到下垂直方向

将光标的x与y坐标复制给x与y:x,y=pyautogui.position()

.onScreen() 检查给定的点是否存在当前的屏幕中,返回True或False,接受两个整数参数,分别是x与y坐标

控制鼠标运动

移动到指定的点moveTo()

.moveTo(x,y,duration=”) 移动鼠标光标到指定坐标,duration参数可以选填,设置移动到该位置使用多长时间

在鼠标移动的过程中,手动移动鼠标会触发警告

移动 move()

.move()方法表示相对于当前鼠标的位置移动一定的距离

pyautogui.move(100, 300, duration=3)

如果鼠标处于0,0的坐标,会触发报错

鼠标拖动 drag()/dragTo()

.drag(x,y)方法可以拖动鼠标,在拖动之前需要先移动鼠标到指定位置,此外这个方法不会自动放开鼠标

可以通过button=right或left设置按住鼠标右键还是左键

如果要拖动到精确的坐标,可以使用dragTo

鼠标点击 click()

.click() 可以模拟鼠标在当前位置点击鼠标,默认为左键,

可以将button参数设置为’right’来设置用右键点击

可以填入参数设置点击的位置,不填写则表示在当前位置点击

clicks参数可以设置鼠标点击的次数,默认为1

interval参数用来控制两次点击之间的间隔时间,默认为0.1(以秒为单位)

可以使用.doubleClick()来模拟双击

可以使用.tripleCkick()来模拟三次点击

需要注意的是,如果一些软件,如果窗口未处于选定状态,那么第一次点击会选中这个窗口,第二次点击才是按下按钮

鼠标的按压和释放 mouseDown/mouseUp

mouseDown()和moseUp可以模拟鼠标的按压和释放,同样的,在按压与释放前,需要记住先移动鼠标

鼠标的滚动 scroll

.scroll() 可以模拟鼠标滚轮,输入一个数字(正数向上,负数向下)可以模拟向上或向下滚动,设置y参数可以横向滚动

控制键盘

输入文本 write

.write() 可以键入文本,可以加入Interval参数来控制输入速度,这个值可以推荐设为0.1

按下并释放 press()

调用press()函数并指定按键时,可以按下并释放该按键,相当于keyDown()和keyUp()的封装

pyautogui.press(‘enter’) #模拟按下Enter键

pyautogui.press(‘f1’)

pyautogui.press(‘left’)

可以模拟同时按下多个按键,需要将按键作为一个列表作为参数传入,有点像write()

pyautogui.press([‘a’, ‘b’])

presses参数可以设置按下的次数:

#输入10次ab

pyautogui.press([‘a’, ‘b’],presses=10) #输出abababababababababab

字母和数字键:’a’ – ‘z’, ‘A’ – ‘Z’, ‘0’ – ‘9’

功能键:’f1′ – ‘f12’

特殊键:’tab’, ‘enter’, ‘space’, ‘esc’, ‘backspace’, ‘delete’, ‘insert’, ‘home’, ‘end’, ‘pageup’, ‘pagedown’

方向键:’up’, ‘down’, ‘left’, ‘right’

控制键:’ctrl’, ‘alt’, ‘shift’, ‘win’

符号键:’`’, ‘-‘, ‘=’, ‘[‘, ‘]’, ‘\’, ‘;’, “‘”, ‘,’, ‘.’, ‘/’, ‘numlock’, ‘capslock’, ‘printscreen’, ‘scrolllock’

按下并释放hotkey()

按下某个或多个键,可以使用hotkey()函数,它会按按顺序按下,然后逆序释放

比如按下CTRL+C快捷键,可以使用:

pyautogui.hotkey(‘ctrl’, ‘c’) #不需要作为一个列表传入

pyautogui.hotkey(‘alt’, ‘a’) # 按下alt+a组合键

按下与释放 keyDown()/keyUp()

#模拟按下并释放CTRL+C快捷键

pyautogui.keyDown(‘ctrl’)

pyautogui.keyDown(‘c’)

pyautogui.keyUp(‘ctrl’)

pyautogui.keyUp(‘c’)

图像功能

截图功能 screen

.screenshop()可以截图并保存成指定的文件名,默认保存成py程序相同目录,也可以设置目录

.screenshot(‘文件名.png’) #默认截取整个屏幕

region参数可以设置截屏区域,该参数有4个值,放入一个括号中传入,前2个值是xy坐标,后2个值是截图的宽度和高度(向右下角方向延伸)

pyautogui.screenshot(‘a.png’,region=(x,y,900,300))

图像定位 locateOnScreen()

pyautogui.locateOnScreen(‘图片.png’)

返回类似于一个元组的对象,可以对其中的值进行索引,

4个数值分别是:图像距离屏幕左边缘的距离、图像距离屏幕顶部边缘的距离,以及图像的宽度和高度

如果屏幕里存在多张相同的图片,会返回最接近左上角的那一张

获取图标位置,查找中心点,并移动鼠标至图标中心点





#获取图标位置
loc=pyautogui.locateOnScreen('window.png')
print(loc)
#如果找不到loc,结束本次循环
if loc==None:
    print('搜索不到按钮')
  	continue	#结束本次打印任务
#定位中心点
center=pyautogui.center(loc)
#移动到中心点
pyautogui.moveTo(center)

等待屏幕上出现指定图片 waitForImage()

.waitForImage可以等待屏幕上出现指定图片,如果在指定时间内找到图片,会调用locateOnScreen()函数查找并获取该图片的位置和大小信息,并将其保存到变量image_box中,如果超时,则程序提示错误格式是:

waitForImage(image, timeout=None, interval=0.5, grayscale=False, confidence=0.999)

它有5个参数:

image表示等待的图片文件

timeout表示等待图片出现的最长时间,单位是秒,默认为None表示没有限制

Interval表示间隔多久检测一次图片,单位为秒,默认是半秒

grayscale表示是否将图片转换为灰度图像进行匹配,默认值为False,即用原始彩色图像进行匹配

confidence表示匹配图片的置信度,表示查找到图片的像素占总像素的比例,默认值为0.999

查找屏幕内所有匹配图像 locateAllOnScreen()

#查找屏幕上所有与指定图片相同的位置的坐标

loc=list(pyautogui.locateAllOnScreen(‘win.png’))

#输出所有图标的位置信息

for i in loc:

print(i.left)

print(i.top)

其他图像功能

获取指定位置的像素值 .pixel

.pixel()可以获取指定位置的像素值,亿RGB元组的形式返回

rgb=pyautogui.pixel(x,y)

print(rgb) #返回:(0, 0, 0)

检测屏幕上指定位置的像素值是否与指定的像素值相匹配 .pixelMatchesColor()

.pixelMatchesColor()可以将指定位置的像素值,与指定的像素值进行比较,以检查是否匹配,

它有4个参数:

x和y用来指定位置

expectedRGBColor参数设置要匹配的颜色值,以RGB元组的形式表示

tolerance可以设置颜色容差值,表示颜色匹配的允许误差范围,默认为0,表示只匹配精确颜色





#检查光标所处位置的像素是否为纯黑

#获取光标位置
p=pyautogui.position()
x,y=p

#获取光标位置的颜色
rgb=pyautogui.pixel(x,y)

#检测光标位置的颜色是否是黑色
if pyautogui.pixelMatchesColor(x,y,(0,0,0),tolerance=0):
    print('纯黑色')
else:
    print('不是纯黑')

实例





while True:
    start=input('输入1开始本次打印')
    #如果输入1,开始打印操作
    if start == str(1):
        #获取图标位置
        loc=pyautogui.locateOnScreen('window.png')
        print(loc)
        #如果找不到loc,结束本次循环
        if loc==None:
            print('搜索不到按钮')
            continue #结束本次打印任务
        #定位中心点
        center=pyautogui.center(loc)
        #移动到中心点
        pyautogui.moveTo(center,duration=1)
import pyautogui
import time
import keyboard
i=0

print('按下Q键开始自动打印')
def on_key_press(key):
    global i  # 将 i 定义为全局变量
    if key.name == 'q':
        print('自动打印中,请勿操作鼠标键盘...')

        #获取光标坐标
        # 获取光标位置
        p = pyautogui.position()
        x, y = p

        #模拟一次点击
        pyautogui.click()

        #右键
        pyautogui.click(button='right')

        #查找配货按钮
        loc = pyautogui.locateOnScreen('bt/peihuo.png')
        # 如果找不到loc
        if loc == None:
            print('搜索不到按钮')
            return
        else:
            # 定位中心点
            center = pyautogui.center(loc)
            # 移动到中心点
            pyautogui.moveTo(center, duration=1)
            pyautogui.click()

            #返回最初光标位置
            pyautogui.moveTo(x,y,duration=1)
            #双击
            pyautogui.doubleClick()
            #等待1秒
            time.sleep(1)

            # 查找打印预览
            loc = pyautogui.locateOnScreen('bt/yulan.png')
            # 如果找不到loc
            if loc == None:
                print('搜索不到打印预览按钮')
                return
            else:
                # 定位中心点
                center = pyautogui.center(loc)
                # 移动到中心点
                pyautogui.moveTo(center, duration=1)
                pyautogui.click()
                # 等待1秒
                time.sleep(1)

                # 查找打印按钮
                loc = pyautogui.locateOnScreen('bt/dayin2.png')
                # 如果找不到loc
                if loc == None:
                    print('搜索不到打印按钮')
                    return
                else:
                    # 定位中心点
                    center = pyautogui.center(loc)
                    # 移动到中心点
                    pyautogui.moveTo(center, duration=1)
                    pyautogui.click()
                    # 等待1秒
                    time.sleep(1)

                    #按下回车键
                    #pyautogui.press('enter')

                    # 模拟按下Alt+F4键
                    #pyautogui.hotkey('alt', 'f4')

                    # 模拟按下Alt+F4键
                    #pyautogui.hotkey('alt', 'f4')

                    #返回鼠标初始位置
                    #pyautogui.moveTo(x,y)


keyboard.on_press(on_key_press)

# 运行监听器
keyboard.wait()

按Q打印

import pyautogui
import time
import keyboard
i=0

print('鼠标移到新订单上方,按下Q键开始自动打印')
def on_key_press(key):
    global i  # 将 i 定义为全局变量

    if key.name == 'q':
        print('自动打印中,请勿操作鼠标键盘...')


        # 获取光标位置
        p = pyautogui.position()
        x, y = p

        #模拟一次点击
        pyautogui.click()

        #右键
        pyautogui.click(button='right')

        #查找配货按钮
        loc = pyautogui.locateOnScreen('bt/peihuo.png')
        # 如果找不到loc
        if loc == None:
            print('搜索不到配货按钮')

            #根据像素坐标移动鼠标
            pyautogui.moveRel(88, 159, duration=0.7)
            pyautogui.click()

            # 返回最初光标位置
            pyautogui.moveTo(x, y, duration=0.7)
        else:
            # 根据像素坐标移动鼠标
            pyautogui.moveRel(88, 159, duration=0.7)
            pyautogui.click()

            # 返回最初光标位置
            pyautogui.moveTo(x, y, duration=0.7)

            #双击
            pyautogui.doubleClick()
            #等待1秒
            time.sleep(1)

            # 查找打印预览
            loc = pyautogui.locateOnScreen('bt/yulan.png')
            # 如果找不到loc
            if loc == None:
                print('搜索不到打印预览按钮')
                return
            else:
                # 定位中心点
                center = pyautogui.center(loc)
                # 移动到中心点
                pyautogui.moveTo(center, duration=1)
                pyautogui.click()
                # 等待1秒
                time.sleep(0.7)

                # 查找打印按钮
                loc = pyautogui.locateOnScreen('bt/dayin2.png')
                # 如果找不到loc
                if loc == None:
                    print('搜索不到打印按钮')
                    return
                else:
                    # 定位中心点
                    center = pyautogui.center(loc)
                    # 移动到中心点
                    pyautogui.moveTo(center, duration=1)
                    pyautogui.click()
                    # 等待1秒
                    time.sleep(0.7)

                    #按下回车键
                    #pyautogui.press('enter')
                    # 等待1秒
                    time.sleep(0.7)

                    # 模拟按下Alt+F4键
                    #pyautogui.hotkey('alt', 'f4')
                    # 等待1秒
                    time.sleep(0.7)

                    # 模拟按下Alt+F4键
                    #pyautogui.hotkey('alt', 'f4')
                    # 等待1秒
                    time.sleep(0.7)


                    # 返回最初光标位置
                    pyautogui.moveTo(x, y, duration=1)

                    i+=1
                    print('已打印'+str(i)+'份订单')






keyboard.on_press(on_key_press)

# 运行监听器
keyboard.wait()

批量出库

import keyboard
import pyautogui
import sys

q=input('输入出库数量:')
q=int(q)  #转换为数字类型

print('将鼠标移到订单上方,按下chu后批量出库')
i =0

# 监听按键事件
def on_key_press(key):
    # 定义一个全局变量记录当前按下的键序列
    global key_sequence
    # 将按下的键名称添加到键序列中
    key_sequence += key.name
    # 如果键序列等于'chu',则打印出'123'并清空键序列
    if key_sequence == 'chu':

        global i
        global q






        while i < q:

            #功能模块
            # 获取光标位置
            p = pyautogui.position()
            x, y = p


            pyautogui.click()
            pyautogui.click(button='right')

            # 根据像素坐标移动鼠标
            pyautogui.moveRel(74, 204, duration=0.7)
            pyautogui.click()

            # 返回最初光标位置
            pyautogui.moveTo(x, y, duration=0.7)


            i += 1
            print('已出库'+str(i)+'张')

        if i >=q:
            print('出库完成,程序结束运行')
            sys.exit()







        key_sequence = ''

# 定义一个空的键序列
key_sequence = ''

# 绑定按键事件
keyboard.on_press(on_key_press)



# 开始监听键盘事件
#keyboard.wait()

10分钟内没按下q键就自动退出程序

import keyboard
import time

# 记录上一次按下q键的时间
last_time = time.time()

# 监听按键事件
def on_key_press(key):
    global last_time
    if key.name == 'q':
        print('按下q键')
        last_time = time.time()  # 更新上一次按下q键的时间

# 绑定按键事件
keyboard.on_press(on_key_press)

# 开始监听键盘事件
while True:
    # 每隔60秒检查一次时间差
    time_diff = time.time() - last_time
    if time_diff > 10 * 60:  # 如果时间差超过10分钟,执行操作
        print(123)
        last_time = time.time()  # 更新上一次检查时间差的时间
    time.sleep(60)  # 暂停60秒,继续下一次循环

发表回复