• 【参考】python中鼠标操作的各种解决方案适用性推荐


    在测试系统或者自动化程序中,都会需要用到自动控制鼠标的操作来执行一些任务。大多数这些任务都需要取得模拟人的行为特点而且速度上也有更快的反应和效率。若有如此需要,这篇文章不能错过。

    基于操作对象不同可以将其分为操作系统浏览器两种大类。其中基于操作系统的鼠标操作是可以满足跨平台操作的,若结合图像识别可以实现更加拟人的行为,这里推荐pynput, pyautogui;基于浏览器的鼠标操作主推selenim中的操作链功能Actionchains,可以实现一连串复杂的操作。

    一、pynput(基于操作系统)

    pynput是目前我找到的最为简单的控制鼠标指令;功能主要模拟鼠标操作,模拟键盘操作,监听鼠键操作。

    地址:https://pypi.org/project/pynput/   下面使用方法很全面很完整

    适用情景:较为简单的鼠标操作,完全可以跨平台进行各种操作点击。但是并不能够轻松实现全部的鼠标操作。比如点击滑行放开鼠标,手势密码的解锁。使用时与主程序之间会有较为长的中断时间,往往需要sleep1秒钟才能实现期望效果。

    常用方法如下:

     1 from pynput.mouse import Button, Controller
     2 
     3 mouse = Controller()
     4 
     5 # Read pointer position
     6 print('The current pointer position is {0}'.format(
     7     mouse.position))
     8 
     9 # Set pointer position
    10 mouse.position = (10, 20)
    11 print('Now we have moved it to {0}'.format(
    12     mouse.position))
    13 
    14 # Move pointer relative to current position
    15 mouse.move(5, -5)
    16 
    17 # Press and release
    18 mouse.press(Button.left)
    19 mouse.release(Button.left)
    20 
    21 # Double click; this is different from pressing and releasing
    22 # twice on Mac OSX
    23 mouse.click(Button.left, 2)
    24 
    25 # Scroll two steps down
    26 mouse.scroll(0, 2)

    二、pyautogui(基于操作系统)

    当使用pynput无法满足需要的时候,pyautogui应该是最佳的选择。从名字就能看出来,它的功能主要就是为了跨平台之间实现autogui。功能更加完整强大,如果确定基于较为负责的跨平台操作。pyautogui当之无愧最佳选择。

    地址:https://pyautogui.readthedocs.io/en/latest/

    适用情景:很广泛,目前还没有遇到它不能够实现的。

    在画图程序中画出图形

    >>> distance = 200
    >>> while distance > 0:
            pyautogui.dragRel(distance, 0, duration=0.5)   # move right
            distance -= 5
            pyautogui.dragRel(0, distance, duration=0.5)   # move down
            pyautogui.dragRel(-distance, 0, duration=0.5)  # move left
            distance -= 5
            pyautogui.dragRel(0, -distance, duration=0.5)  # move up
    

     

    常用指令

    import pyautogui
    screenWidth, screenHeight = pyautogui.size()
    currentMouseX, currentMouseY = pyautogui.position()
    pyautogui.moveTo(100, 150)
    pyautogui.click()
    pyautogui.moveRel(None, 10)  # move mouse 10 pixels down
    pyautogui.doubleClick()
    pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad)  # use tweening/easing function to move mouse over 2 seconds.
    pyautogui.typewrite('Hello world!', interval=0.25)  # type with quarter-second pause in between each key
    pyautogui.press('esc')
    pyautogui.keyDown('shift')
    pyautogui.press(['left', 'left', 'left', 'left', 'left', 'left'])
    pyautogui.keyUp('shift')
    pyautogui.hotkey('ctrl', 'c')
    pyautogui.dragRel(0, 77, duration=0.5)
    

      

    三、selenim之Actionchains(基于浏览器)

    在浏览器中,可以充分利用好动作链完成各种各样的连续操作,包括最近比较火的滑动验证码破解。完全可以在这里实现。

    四、最后推荐一个基于安卓进行类似操作的包ADB

    地址:https://github.com/mzlogin/awesome-adb#%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95

  • 相关阅读:
    POJ 3831 & HDU 3264 Open-air shopping malls(几何)
    LeetCode Maximum Depth of Binary Tree
    解决下载Android Build-tools 19.1.0失败
    cocos2d-x3.6 连连看随机地图实现
    Swift初体验(三)
    Delphi XE7中新并行库
    mysql 权限控制具体解释
    C实例--推断一个字符串是否是回文数
    阿里 2014校招机试题 求存放整数的二叉树相差最大的两节点之差绝对值
    Choosing Between ElasticSearch, MongoDB & Hadoop
  • 原文地址:https://www.cnblogs.com/bobyin/p/12102284.html
走看看 - 开发者的网上家园