zoukankan      html  css  js  c++  java
  • python-pyautogui控制鼠标键盘自动操作

    第一步:

    pip install pyautogui

    安装pyautogui库。

    第二步:

    基本使用

    screenWidth, screenHeight=pyautogui.size()# 屏幕尺寸mouseX, mouseY=pyautogui.position()# 返回当前鼠标位置,注意坐标系统中左上方是(0, 0)

    为了保持用户可以随时干预鼠标键盘的动作,比较好的方法是添加停顿,或者强制结束,否则想停了鼠标还一直在晃就会失控,下面是两种对应的设置

    pyautogui.PAUSE=1.5# 每个函数执行后停顿1.5秒

    pyautogui.FAILSAFE=True# 鼠标移到左上角会触发FailSafeException,因此快速移动鼠标到左上角也可以停止

    ####鼠标操作
    移动
    w, h=pyautogui.size()
    
    pyautogui.moveTo(w/2, h/2)# 基本移动
    
    pyautogui.moveTo(100,200, duration=2)# 移动过程持续2s完成
    
    pyautogui.moveTo(None,500)# X方向不变,Y方向移动到500
    
    pyautogui.moveRel(-40,500)# 相对位置移动
    
    ####拖动
    # 点击+向下拖动
    
    pyautogui.click(941,34, button='left')pyautogui.dragRel(0,100, button='left', duration=5)
    
    点击
    pyautogui.click(300,400, button='right')# 包含了move的点击,右键
    
    pyautogui.click(clicks=2, interval=0.25)# 双击,间隔0.25s
    
    滚轮
    pyautogui.scroll(-10)
    

    键盘操作

    输入文字
    点击对话框输入文字即可,不过中文好像不行

    pyautogui.click(1279,374)pyautogui.typewrite('hello world!')
    

    精确控制键盘

    以下是手动输入中文的方法

    pyautogui.press('shift')# 切换输入法的中英文
    
    pyautogui.press(['#',' '])# press 可以对单个字符或者列表进行操作
    
    pyautogui.press(['x','i','a','o'])
    
    pyautogui.press(['y','u'])
    
    pyautogui.press(['w','e','i'])
    
    pyautogui.press(['l','a','n'])
    
    pyautogui.press(' ')
    
    hotKey
    pyautogui.hotkey('shift','a')# 可以使用组合键,本质上是
    
    '''pyautogui.keyDown('shift')
    
    pyautogui.keyDown('a')
    
    pyautogui.keyUp('shift')
    
    pyautogui.keyUp('a')'''
    

    消息弹窗函数

    如果你需要消息弹窗,通过单击OK暂停程序,或者向用户显示一些信息,消息弹窗函数就会有类似JavaScript的功能:

    In [ ]:
    
    pyautogui.alert('这个消息弹窗是文字+OK按钮')
    
    pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮')
    
    pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK')
    
    Out[ ]:
    
    print(pyautogui.alert('这个消息弹窗是文字+OK按钮'))
    
    print(pyautogui.confirm('这个消息弹窗是文字+OK+Cancel按钮'))
    
    str1 = pyautogui.confirm(text='1-10', title='test', buttons=range(10))
    
    print(str1)
    
    str1 =pyautogui.prompt('这个消息弹窗是让用户输入字符串,单击OK')
    
    print(str1)
    
    str1 = pyautogui.password(text='密码', title='填', default='123', mask='*')
    
    print(str1)
    

    在prompt()函数中,如果用户什么都不输入,就会返回None。

    截屏函数

    PyAutoGUI用Pillow/PIL库实现图片相关的识别和操作。

    在Linux里面,你必须执行sudo apt-get install scrot来使用截屏特性。

    In [ ]:
    
    #  返回一个Pillow/PIL的Image对象pyautogui.screenshot()pyautogui.screenshot('foo.png')
    
    如果你有一个图片文件想在上面做点击操作,你可以用locateOnScreen()函数来定位。
    
    In [ ]:
    

    返回(最左x坐标,最顶y坐标,宽度,高度)

    pyautogui.locateOnScreen('pyautogui/looks.png')
    
    Out[ ]:
    
    (0, 1040, 48, 40)
    
    locateAllOnScreen()函数会寻找所有相似图片,返回一个生成器:
    
    In [ ]:
    
    for i in pyautogui.locateAllOnScreen('pyautogui/looks.png'):
    
        print(i)
    
    (0, 1040, 48, 40)
    
    In [ ]:
    
    list(pyautogui.locateAllOnScreen('pyautogui/looks.png'))
    
    Out[ ]:
    
    [(0, 1040, 48, 40)]
    
    locateCenterOnScreen()函数会返回图片在屏幕上的中心XY轴坐标值:
    
    In [ ]:
    
    pyautogui.locateCenterOnScreen('pyautogui/looks.png')
    
    Out[ ]:
    
    (24, 1060)
    

    如果没找到图片会返回None。

    定位比较慢,一般得用1~2秒

    缓动/渐变(Tween / Easing)函数
    缓动/渐变函数的作用是让光标的移动更炫。如果你不需要用到的话,你可以忽略这些。

    缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。PyAutoGUI有30种缓动/渐变函数,可以通过pyautogui.ease*?查看。其中,pyautogui.easeInQuad()函数可以用于moveTo(),moveRel(),dragTo()和dragRel()函数,光标移动呈现先慢后快的效果,整个过程的时间还是和原来一样。而pyautogui.easeOutQuad函数的效果相反:光标开始移动很快,然后慢慢减速。pyautogui.easeOutElastic是弹簧效果,首先越过终点,然后再反弹回来。例如:

    In [ ]:
    
    #  开始很慢,不断加速
    
    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)
    

    这些效果函数是模仿Al Sweigart的PyTweening模块,可以直接使用,不需要额外安装。

    如果你想创建自己的效果,也可以定义一个函数,其参数是(0.0,1.0),表示起点和终点,返回值是介于[0.0,1.0]之间的数。

    鼠标单击

    click()函数模拟单击鼠标左键一次的行为。例如:

    In [ ]:
    
    pyautogui.click()
    
    如果单机之前要先移动,可以把目标的XY坐标值传入函数:
    
    In [ ]:
    
    #  先移动到(100, 200)再单击pyautogui.click(x=100,y=200,duration=2)
    
    可以通过button参数设置left,middle和right三个键。例如:
    
    In [ ]:
    
    pyautogui.click(button='right')
    

    要做多次单击可以设置clicks参数,还有interval参数可以设置每次单击之间的时间间隔。例如:

    In [ ]:
    
    #  双击左键
    
    pyautogui.click(clicks=2)
    
    #  两次单击之间停留0.25秒
    
    pyautogui.click(clicks=2,interval=0.25)
    
    #  三击右键
    
    pyautogui.click(button='right',clicks=2,interval=0.25)
    

    为了操作方便,PyAutoGUI提供了doubleClick(),tripleClick()和rightClick()来实现双击、三击和右击操作。

    鼠标按下和松开函数
    mouseDown()和mouseUp()函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有x,y和button。例如:

    In [ ]:
    
    #  鼠标左键按下再松开
    
    pyautogui.mouseDown();
    
    pyautogui.mouseUp()
    
    #  按下鼠标右键
    
    pyautogui.mouseDown(button='right')
    
    #  移动到(100, 200)位置,然后松开鼠标右键
    
    pyautogui.mouseUp(button='right',x=100,y=200)
    

    滚轮滚动函数

    鼠标滚轮滚动可以用scroll()函数和clicks次数参数来模拟。不同平台上的clicks次数不太一样。还有x和y参数可以在滚动之前定位到(x, y)位置。例如:

    In [ ]:
    
    #  向上滚动10格
    
    pyautogui.scroll(10)
    
    #  向下滚动10格
    
    pyautogui.scroll(-10)
    
    #  移动到(100, 100)位置再向上滚动10格
    
    pyautogui.scroll(10,x=100,y=100)
    
    在OS X和Linux平台上,PyAutoGUI还可以用hscroll()实现水平滚动。例如:
    
    In [ ]:
    
    #  向右滚动10格
    
    pyautogui.hscroll(10)
    
    #  向左滚动10格
    
    pyautogui.hscroll(-10)
    
    scroll()函数是vscroll()的一个包装(wrapper),执行竖直滚动。
    
  • 相关阅读:
    JVM问题定位分析(一)
    性能分析--上下文切换(context switch)
    JVM--如何通过软引用和弱引用提JVM内存使用效率
    docker挂载文件宿主机与容器内部数据不同步问题
    使iptables规则在CentOS 7中持久化
    dstat
    curl
    Django REST framework 之JWT认证
    【区别】摘要、数字签名、数字证书
    使用django.core.mail的EmailMultiAlternatives发送邮件a标签链接不生效问题
  • 原文地址:https://www.cnblogs.com/enumx/p/12361551.html
Copyright © 2011-2022 走看看