在测试系统或者自动化程序中,都会需要用到自动控制鼠标的操作来执行一些任务。大多数这些任务都需要取得模拟人的行为特点而且速度上也有更快的反应和效率。若有如此需要,这篇文章不能错过。
基于操作对象不同可以将其分为操作系统,浏览器两种大类。其中基于操作系统的鼠标操作是可以满足跨平台操作的,若结合图像识别可以实现更加拟人的行为,这里推荐pynput, pyautogui;基于浏览器的鼠标操作主推selenim中的操作链功能Actionchains,可以实现一连串复杂的操作。
一、pynput(基于操作系统)
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当之无愧最佳选择。
适用情景:很广泛,目前还没有遇到它不能够实现的。
在画图程序中画出图形
>>> 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(基于浏览器)
在浏览器中,可以充分利用好动作链完成各种各样的连续操作,包括最近比较火的滑动验证码破解。完全可以在这里实现。