【Python】解决pyautogui移动而导致的FailSafeException的问题

我在使用pyautogui在模拟鼠标移动和键盘交互的时候,一旦鼠标移动,可能就会发生这个异常:

pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse
moving to a corner of the screen. To disable this fail-safe, set
pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.

解决方法:

1. 禁用故障保护:

import pyautogui
pyautogui.FAILSAFE = False

这样设置后,即使鼠标移动到屏幕角落,也不会触发 FailSafeException 异常。

不过,禁用故障保护(FAIL-SAFE)可能会导致意外的行为,因为在启用故障保护时,如果将鼠标移动到屏幕左上角,将触发 pyautogui.FailSafeException 异常以停止程序。禁用故障保护后,程序将不会停止,而是继续执行。因此,建议在使用 pyautogui 时小心谨慎。

除了禁用故障保护机制,还有其他几种方法可以避免 pyautogui.FailSafeException

2. 增加暂停时间

在每次调用 pyautogui 的函数后设置一个暂停时间,这样可以给用户一个反应的机会,避免鼠标快速移动到屏幕角落触发故障保护。可以通过设置 pyautogui.PAUSE 变量来实现:

pyautogui.PAUSE = 2.5

这样每次执行 pyautogui 的操作后,程序会自动暂停2.5秒。

3. 获取屏幕和鼠标位置信息

在执行鼠标移动操作之前,可以先获取当前屏幕的分辨率和鼠标的位置,以确保鼠标移动的坐标在屏幕范围内,避免移动到屏幕角落:

width, height = pyautogui.size()
currentMouseX, currentMouseY = pyautogui.position()

通过这些信息,可以更安全地控制鼠标的移动。

4. 使用相对移动

使用 pyautogui.moveRel() 函数进行相对移动,而不是绝对移动。这样可以从当前位置移动鼠标,减少直接移动到屏幕角落的风险:

pyautogui.moveRel(30, -50, duration=0.5)

这个函数会将鼠标从当前位置向右移动30像素,向下移动-50像素。

5. 检查坐标是否在屏幕上

在移动鼠标之前,可以使用 pyautogui.onScreen(x, y) 函数检查目标坐标是否在屏幕上,如果不在,可以调整坐标或取消操作:

if pyautogui.onScreen(x, y):
    pyautogui.moveTo(x, y)
else:
    print("坐标超出屏幕范围")

这样可以避免将鼠标移动到屏幕外的区域。

通过上述步骤,我们可以解决因触发故障保护而导致的 pyautogui.FailSafeException 异常问题。

不过,pyautogui确实是很好的模拟交互的包,但是因为动用了屏幕位置和鼠标,就影响到使用。

所以如果可以用其他方法。例如find_element的方法这种的话,那就还是建议用这种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值