pyautogui库

pyautogui是一个Python库,用于实现GUI自动化,包括控制鼠标和键盘操作。文中详细介绍了如何使用pyautogui进行鼠标移动、点击、拖动、滚动以及键盘输入等,并展示了如何进行屏幕截图和颜色检测。此外,还提供了自动点赞的实战例子,演示了如何寻找特定图像并执行点击操作。
摘要由CSDN通过智能技术生成

一、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('没有找到目标,屏幕下滚~')

点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
没有找到目标,屏幕下滚~
点赞成功!
没有找到目标,屏幕下滚~



-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值