为什么KeyboardInterrupt不适用于Python pyautogui脚本?退出程序/循环的另一种方法?

时间:2018-10-11 22:48:41

标签: python while-loop key-bindings pyautogui keyboardinterrupt

我正在尝试完成一个简单的GUI自动化程序,该程序仅打开一个网页,然后每0.2秒单击该页面上的特定位置,直到我告诉它停止为止。我希望我的代码能够运行并无限循环运行,直到我指定的按键绑定打破了循环(或整个程序)。我从经典的KeyboardInterrupt入手,据说可以使CTRL + C退出程序。这是我的代码:

import webbrowser, pyautogui, time
webbrowser.open('https://example.com/')
print('Press Ctrl-C to quit.')
time.sleep(5)
#pyautogui.moveTo(1061, 881)
try:
    while True:
            time.sleep(0.2)
            pyautogui.click(1061,881)
except KeyboardInterrupt:
    print('\nDone.')

不幸的是,KeyboardInterrupt并使用CTRL-C退出似乎不适用于此脚本(可能是由于while循环?)。这将导致循环继续无限运行,而无法停止。所以我的问题是:为什么键盘中断不起作用?我在其他脚本中也看到过类似的示例。另外,如果KeyboardInterrupt无法正常工作,有没有办法我可以编写一个简单的键盘绑定来退出程序/循环?

2 个答案:

答案 0 :(得分:1)

我怀疑这可能与您有一个不同于脚本的活动窗口有关;当您使用webbrowser时,打开一个网页,然后单击它,它将活动窗口移至该网页而不是Python控制台。因此,只有在控制台是活动窗口时,ctrl+c才会产生KeyboardInterrupt。您的脚本实际上可能是正确的;但是您的活动窗口不在Python上,因此您必须在程序运行时通过单击Python控制台来对其进行测试。

要回答您的评论:不,我不知道有任何其他“快速”方式来做这种事情。

答案 1 :(得分:1)

使用以下代码

pyautogui.FAILSAFE = True

然后停止,将鼠标移动到屏幕的左上角