在測試系統或者自動化程序中,都會需要用到自動控制鼠標的操作來執行一些任務。大多數這些任務都需要取得模擬人的行為特點而且速度上也有更快的反應和效率。若有如此需要,這篇文章不能錯過。
基於操作對象不同可以將其分為操作系統,瀏覽器兩種大類。其中基於操作系統的鼠標操作是可以滿足跨平台操作的,若結合圖像識別可以實現更加擬人的行為,這里推薦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