获取屏幕分辨率
屏幕左上角的位置坐标从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秒,继续下一次循环