PyAutoGUI 库实现 鼠标非匀速拖动

继上次鼠标非匀速拖动的帖子之后,现在看了一下 python 的 PyAutoGUI 库,发现此库也是可以用于操作鼠标,键盘,屏幕。

首先从基本的安装开始,发现 pip 安装不行,需要到https://pypi.org/project/PyAutoGUI/#files 网站上下载包,解压之后把 pyautogui 和 PyAutoGUI.egg-info 这两个文件夹 copy 到 site-package 中,然后再 pip install pytweening,如果用到截屏的话还需要 pip install pyscreeze

第二步直接代码如下:
import pyautogui
pyautogui.dragTo(200, 200, 2, pyautogui.easeOutQuad)
此函数是直接把当前屏幕的鼠标拖拽到参数指定位置,目前位置是 200,200,所以他并不能指定鼠标拖拽的起始位置。
dragTo 函数中包含了三步:
mouseDown鼠标点下去
_mouseMoveDrag鼠标拖拽移动
mouseUp鼠标松开
其中_mouseMoveDrag的原理就是根据传入的终点坐标参数,生成特定数目的坐标放入集合当中。
源码中表示生成坐标的数量代码如下:

num_steps = int(duration / MINIMUM_SLEEP) 

源码中表示表示生成所有坐标位置的集合代码如下:

steps = [
	getPointOnLine(startx, starty, x, y, tween(n / num_steps))    
	for n in range(num_steps)
]

当有了所有移动的坐标集合之后,然后再循环中不断移动,直到移动到参数设定的位置 (比如说上面集合的大小是 40,那么集合中就有 40 个位置的坐标,循环的时候鼠标从第一个位置移动到第二个位置,再从第二个位置移动到第三个位置,以此类推,直到循环结束)。

以上是分析 pyautogui 模块中 dragTo 函数的源码实现,现在需要实现指定鼠标位置移动拖拽到另外一个位置的功能,代码如下:

import pyautogui
pyautogui.moveTo(800, 900, 0.2)   # 800,900表示鼠标拖拽的起始位置,0.2设置鼠标移动快慢
pyautogui.dragTo(200, 200, 2, pyautogui.easeOutQuad)  # 200,200表示鼠标拖拽的终点位置,0.2设置鼠标拖拽的快慢,“easeOutQuad”表示鼠标拖动先快后慢(多种拖拽方式可选)