一、pyautogui简介
pyautogui 是一个纯 Python 的 GUI 自动化工具,通过它可以让程序自动控制鼠标和键盘的一系列操作来达到自动化测试的目的。
import pyautogui
# 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep
pyautogui.pausr = 1
# 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常
pyautogui.failsafe = True
x,y= 1000,200
pyautogui.onScreen(x,y) #判断xy是否在屏幕上
True
pyautogui.size() #显示平面的大小
Size(width=1920, height=1080)
二、鼠标操作
整个桌面是以左上角为坐标轴的原点,所有的操作都以这个原点,来确定操作位置
pyautogui.position() #获取鼠标当前位置
Point(x=406, y=353)
2.1鼠标移动-move
pyautogui.moveTo(200,400,duration = 2) #将鼠标移动到(200,400)的位置,duration 表示操作时长为2秒
# 控制鼠标移动,duration为持续时间,
for i in range(3): #循环三次
pyautogui.moveTo(200, 200, duration=0.25)
pyautogui.moveTo(400, 200, duration=0.25)
pyautogui.moveTo(400, 400, duration=0.25)
pyautogui.moveTo(200, 400, duration=0.25)
pyautogui.moveRel(200,400,duration = 2) #将鼠标按照当前点向右移动200px,向下移动400px这个方向移动
# 控制鼠标移动,duration为持续时间,
for i in range(3): #循环三次
pyautogui.moveRel(100, 0, duration=0.05) #向右100px
pyautogui.moveRel(0, 100, duration=0.05) #向下100px
pyautogui.moveRel(-100, 0, duration=0.25) #向左100px
pyautogui.moveRel(0, -100, duration=0.25) #向上100px
2.2鼠标操作-button
#单击
pyautogui.click(200,400) #默认是鼠标右键
pyautogui.click(1200,400,button = "right") #点击右键
pyautogui.click(1200,400,button = "left") #点击左键
#双击
pyautogui.doubleClick(1200,400,button = "left") #双击左键
pyautogui.doubleClick(1200,400,button = "right") #双击右键
pyautogui.tripleClick() # 鼠标当前位置左击三下
# 鼠标按下
pyautogui.mouseDown()
# 鼠标释放
pyautogui.mouseUp()
pyautogui.mouseUp(button='right', x=1100, y=200) # 移动到(1100, 200)位置,然后松开鼠标右键
2.3鼠标拖动-drag
pyautogui.dragTo(100,300,duration=1) #拖动到指定坐标位置
pyautogui.dragRel(200,400,duration = 1) #按照方向拖动鼠标
# 按住鼠标左键,把鼠标拖拽到(100, 200)位置
pyautogui.dragTo(100, 200, button='left',duration = 1)
# 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
pyautogui.dragTo(300, 400, 2, button='left')
# 按住鼠标左键,用0.2秒钟把鼠标向上拖拽
pyautogui.dragRel(0, -60, duration=0.2)
2.3鼠标滚动-scroll
pyautogui.scroll(130) #向上滚动 ,向下则输入负数
# pyautogui.scroll(移动步数, x=开始x点, y=开始y点)
pyautogui.scroll(5, 120, 200) #在(120,200)这个位置向上滚动5个单位
2.4鼠标移动方式-ease
#?pyautogui.ease* #查看所有移动方式函数
# 开始很慢,不断加速
pyautogui.moveTo(100, 100,2,pyautogui.easeInQuad)
# 开始很快,不断减速
pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)
# 开始和结束都快,中间比较慢
pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)
# 一步一徘徊前进
pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)
# 徘徊幅度更大,甚至超过起点和终点
pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)
获取鼠标位置
import pyautogui
import time
def get_mouse_position():
time.sleep(1) # 1秒后开始下面代码执行
print("开始获取鼠标位置")
try:
for i in range(10): #循环10次
#获取当前鼠标所在位置
x,y = pyautogui.position()
#str(x) 将 x 转换为字符串,然后 rjust(4) 可以将这个字符串右对齐,得到一个长度为 4 的字符串,不足的地方用空格补齐。
current_position = "鼠标坐标点(X,Y):{},{}".format(str(x).rjust(4),str(y).rjust(4))
#获取(x,y)的颜色信息
pix = pyautogui.screenshot().getpixel((x,y))
#将 current_position和 pix拼接起来
current_position += ' RGB:(' +str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'
print(current_position)
time.sleep(0.5) #间隔0.5秒获取一次
except :
print("无法获取位置")
get_mouse_position()
开始获取鼠标位置
鼠标坐标点(X,Y): 534, 701 RGB:(245,245,245)
鼠标坐标点(X,Y): 534, 701 RGB:(245,245,245)
鼠标坐标点(X,Y): 534, 701 RGB:(255,255,255)
鼠标坐标点(X,Y): 502, 622 RGB:(241,243,244)
鼠标坐标点(X,Y): 962, 548 RGB:(148, 33, 33)
鼠标坐标点(X,Y):1195, 518 RGB:(245,245,245)
鼠标坐标点(X,Y): 845, 675 RGB:(255,255,255)
鼠标坐标点(X,Y): 629, 590 RGB:(245,245,245)
鼠标坐标点(X,Y): 629, 590 RGB:(245,245,245)
鼠标坐标点(X,Y): 629, 590 RGB:(245,245,245)
三、屏幕处理
现在要在屏幕上找到一个红色的点,你会怎么做?通常的做法是拿到这个红色点的颜色值,然后再对屏幕上的点逐个进行比较,直到找到为止
im = pyautogui.screenshot() #获取屏幕截图,返回一个 Pillow 的 image 对象
im.save('screenshot.png')
im
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DI27YrXs-1684310396431)(output_41_0.png)]
rgb = im.getpixel((100, 500)) #获取屏幕截图中指定坐标点的颜色,返回 rgb 颜色值
rgb
(40, 44, 52)
#截取区域图片。截取区域region参数为:左上角XY坐标值、宽度和高度
pyautogui.screenshot(region=(0, 0, 300, 400))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RcJexf9O-1684310396432)(output_43_0.png)]
# 如果你只是要检验一下指定位置的像素值,可以用pixelMatchesColor(x,y,RGB)函数,把X、Y和RGB元组值穿入即可
# 如果所在屏幕中(x,y)点的实际RGB三色与函数中的RGB一样就会返回True,否则返回False
# tolerance参数可以指定红、绿、蓝3种颜色误差范围
pyautogui.pixelMatchesColor(100, 200, (255, 255, 255))
pyautogui.pixelMatchesColor(100, 200, (255, 255, 245), tolerance=10)
True
查找图像区域
pyautogui.locateOnScreen(im) #im是否在页面上,返回(左,上,宽度,高度)
pyautogui.center() #获取区域的中心
四、键盘操作
键盘输入有下面几个常用的函数:
keyDown():模拟按键按下
keyUp():模拟按键松开
press():模拟一次按键过程,即 keyDown 和 keyUP 的组合
typewrite():模拟键盘输出内容
#得到&符号
pyautogui.keyDown("shift")
pyautogui.press("7")
pyautogui.keyUp("shift")
pyautogui.typewrite('python', 1) #编辑器里面就会每隔1秒钟按顺序输出 python 的6个字母。
pyautogui.typewrite(['p','y','t','h','o','n','enter'],2) #编辑器里面就会输出 python 之后换行
pyautogui.hotkey('ctrl','c')
五、弹窗设置
#信息框
pyautogui.confirm('领导,该走哪条路?', buttons=['农村路', '水路', '陆路'])
'水路'
pyautogui.alert(text = "警告!",title = "警告框")
pyautogui.password("输入密码")
pyautogui.prompt('请输入指令:')
六、实战
6.1自动点赞
get_mouse_position() #获取鼠标位置
开始获取鼠标位置
鼠标坐标点(X,Y): 326, 665 RGB:(255,255,255)
鼠标坐标点(X,Y): 365, 611 RGB:(255,255,255)
鼠标坐标点(X,Y): 363, 606 RGB:(255,255,255)
鼠标坐标点(X,Y): 358, 606 RGB:(255,255,255)
鼠标坐标点(X,Y): 380, 606 RGB:(255,255,255)
鼠标坐标点(X,Y): 388, 606 RGB:(255,255,255)
鼠标坐标点(X,Y): 388, 606 RGB:(255,255,255)
鼠标坐标点(X,Y): 382, 607 RGB:(255,255,255)
鼠标坐标点(X,Y): 355, 607 RGB:(255,255,255)
鼠标坐标点(X,Y): 355, 607 RGB:(255,255,255)
target = pyautogui.screenshot(region = (355,607,30,30)) #获取目标图片
target
import pyautogui
import time
pyautogui.failsafe = True
def zan():
time.sleep(0.01) # 等待 0.0.0秒
left, top, width, height = pyautogui.locateOnScreen(target) # 寻找 点赞图片;
center = pyautogui.center((left, top, width, height)) # 寻找 图片的中心
pyautogui.click(center) # 点击
print('点赞成功!')
while True: #无限循环
if pyautogui.locateOnScreen(target):
zan() # 调用点赞函数
else:
pyautogui.scroll(-500) # 本页没有图片后,滚动鼠标;
print('没有找到目标,屏幕下滚~')
点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~
-