鼠标控制函数
屏幕和鼠标位置
屏幕上的位置用笛卡尔坐标 X 和 Y 表示,原点为 0,0,X 值向右逐渐增大,Y值向下逐渐增大。
0,0 X 向右逐渐增大 -->
+---------------------------+
| | Y 向下逐渐增大
| | |
| 1920 x 1080 screen | |
| | V
| |
| |
+---------------------------+ 1919, 1079
屏幕最左上角位置为原点 0, 0。如果屏幕分辨率为 1920 x 1080,则右下角像素为 1919, 1079。
使用size() 函数获取屏幕分辨率(两个整数组成的元组)。使用 position() 函数获取当前光标位置。
例如:
python
>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.position()
(187, 567)
下面是一个简短的 Python 3 程序,用于不停地打印出鼠标位置:
python
#! python3
import pyautogui, sys
print('Press Ctrl-C to quit.')
try:
while True:
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print(positionStr, end='')
print('\b' * len(positionStr), end='', flush=True)
except KeyboardInterrupt:
print('\n')
下面是 Python 2 程序:
python
#! python
import pyautogui, sys
print('Press Ctrl-C to quit.')
try:
while True:
x, y = pyautogui.position()
positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
print positionStr,
print '\b' * (len(positionStr) + 2),
sys.stdout.flush()
except KeyboardInterrupt:
print '\n'
要检查某个坐标是否在屏幕上,将其传入 onScreen() 函数即可,在屏幕上则返回 True。例如:
python
>>> pyautogui.onScreen(0, 0)
True
>>> pyautogui.onScreen(0, -1)
False
>>> pyautogui.onScreen(0, 99999999)
False
>>> pyautogui.size()
(1920, 1080)
>>> pyautogui.onScreen(1920, 1080)
False
>>> pyautogui.onScreen(1919, 1079)
True
鼠标移动
moveTo() 函数会将鼠标光标移动至指定的 X 和 Y 位置。 要表示"当前位置"可传入 None 值。例如:
python
>>> pyautogui.moveTo(100, 200) # 鼠标移动至 100,200.
>>> pyautogui.moveTo(None, 500) # 鼠标移动至 100,500.
>>> pyautogui.moveTo(600, None) # 鼠标移动至 600,500.
正常情况下光标会立刻移动到新位置。如果想要光标慢慢移动到新位置,可再传入第3个参数 duration(单位s)。例如:
python
>>> pyautogui.moveTo(100, 200, 2) # 2s内鼠标移动至 100,200.
(如果 duration 小于 pyautogui.MINIMUM_DURATION的值,移动会瞬间完成。pyautogui.MINIMUM_DURATION 默认为 0.1。)
如果想要相对于当前位置移动,则使用 move() 函数。此函数的参数和 moveTo() 类似。 示例:
python
>>> pyautogui.moveTo(100, 200) # 鼠标移动至 100,200 位置
>>> pyautogui.move(0, 50) # 向下移动 50 像素
>>> pyautogui.move(-30, 0) # 向左移动 30 像素
>>> pyautogui.move(-30, None) # 向左移动 30 像素
鼠标拖拽
PyAutoGUI 中的 dragTo() 和drag() 函数参数与 moveTo() 和move() 函数类似。另外,还有button 参数可设置为 'left'、'middle'或 'right',用于指定拖拽时按下哪个按键。示例:
python
>>> pyautogui.dragTo(100, 200, button='left') # 按住左键,将鼠标拖拽至 100,200
>>> pyautogui.dragTo(300, 400, 2, button='left') # 按住左键,将鼠标拖拽至 300,400,用时2s
>>> pyautogui.drag(30, 0, 2, button='right') # 按住右键,2s内将鼠标向左拖动 30 像素
补间/缓动(Tween / Easing)函数
补间动画是一种额外功能,用于使鼠标移动效果更加有趣。若您不关心此类效果,可以直接跳过本节内容。
补间(或缓动)函数决定了鼠标向目标位置移动时的进度变化。通常,当鼠标在一段时间内移动时,它会以恒定速度沿直线直接向目标移动,这种方式称为线性补间 或线性缓动函数。
PyAutoGUI在pyautogui模块中提供了其他补间函数。例如,将pyautogui.easeInQuad函数作为第四个参数传递给moveTo()、move()、dragTo()和drag()函数时,鼠标光标会先缓慢启动,然后加速移向目标,但移动总时长仍与函数参数设定的时间一致。pyautogui.easeOutQuad函数则相反:鼠标光标初始快速移动,在接近目标时逐渐减速。而pyautogui.easeOutElastic函数会使鼠标移动越过目标点,并像橡皮筋一样来回振荡数次,最终稳定在目标位置。
示例:
python
>>> 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 模块:https://pypi.python.org/pypi/PyTweening https://github.com/asweigart/pytweening。即使不安装该模块,也可以正常使用这些补间函数。
如果想要创建自定义的补间函数,需要定义一个接收单个浮点参数的函数。该参数范围在 0.0(表示鼠标移动的起始点)到 1.0(表示鼠标移动的终点)之间,并且函数应返回一个介于 0.0 和 1.0 之间的浮点数值。
鼠标单击
click() 函数模拟鼠标在当前位置左键单击。一次"单击"定义为按键按下后释放。示例:
python
>>> pyautogui.click() # 单击鼠标
要实现在点击前先执行 moveTo() 移动操作,可通过 x 和 y 命名参数传入整数坐标:
python
>>> pyautogui.click(x=100, y=200) # 先移动到 100,200,再单击鼠标
要指定点击的鼠标按键,可通过 button 命名参数传入 'left'(左键)、'middle'(中键)或 'right'(右键):
python
>>> pyautogui.click(button='right') # 右击鼠标
要实现多次点击,可通过 clicks 命名参数传入整数设置点击次数。还可通过 interval 关键字参数传入浮点数或整数,指定每次点击之间的间隔秒数。示例:
python
>>> pyautogui.click(clicks=2) # 双击鼠标左键
>>> pyautogui.click(clicks=2, interval=0.25) # 双击鼠标左键,中间间隔0.25s
>>> pyautogui.click(button='right', clicks=3, interval=0.25) ## 三击鼠标左键,中间间隔0.25s
作为便捷快捷方式,doubleClick() 函数可执行鼠标左键双击操作。该函数同样支持可选的 x、y、interval 和 button 命名参数。示例:
python
>>> pyautogui.doubleClick() # 左键双击
另提供具有类似可选命名参数的 tripleClick() 函数。
rightClick() 函数支持可选的 x 和 y 命名参数。
mouseDown() 和 mouseUp() 函数
鼠标点击和拖拽操作均由按下鼠标按键和释放鼠标按键两个动作组成。若需分别执行这两个动作,可调用 mouseDown() 和 mouseUp() 函数。它们支持相同的 x、y 和 button 参数。示例:
python
>>> pyautogui.mouseDown(); pyautogui.mouseUp() # 实现与左键单击相同的效果
>>> pyautogui.mouseDown(button='right') # 按下鼠标右键
>>> pyautogui.mouseUp(button='right', x=100, y=200) # 先将鼠标移动至坐标 (100,200),再释放右键
鼠标滚动
通过调用 scroll() 函数并传入表示滚动"刻度"数的整数值,可以模拟鼠标滚轮滚动。不同操作系统中"刻度"对应的实际滚动距离存在差异。该函数还可选支持 x 和 y 命名参数,允许在滚动前先将鼠标光标移动至指定坐标。示例:
python
>>> pyautogui.scroll(10) # 向上滚动 10 "刻度"
>>> pyautogui.scroll(-10) # 向下滚动 10 "刻度"
>>> pyautogui.scroll(10, x=100, y=100) # 鼠标先移动至 100,200, 再向上滚动 10 "刻度"
在 OS X 和 Linux 平台,PyAutoGUI 中也可以通过使用 hscroll() 函数实现水平滚动。示例:
python
>>> pyautogui.hscroll(10) # 向右滚动 10 "刻度"
>>> pyautogui.hscroll(-10) # 向左滚动 10 "刻度"
scroll() 函数是对 vscroll()的封装,用于执行垂直滚动。