使用Python的Windows桌面GUI自动化 - 睡眠与紧密循环

时间:2015-12-18 18:20:57

标签: python windows ui-automation pyautogui

我正在使用Python的PyAutoGUI库来自动化GUI。在我完成当前窗口上的数据输入后,我自动化的应用程序将打开一个新窗口。一切都由python自动化(当前窗口中的数据输入和打开窗口所需的点击)来处理。

在当前窗口中执行单击时,新窗口需要一些时间才能打开(可能介于2-5秒之间)。所以我可以在这里考虑两个选项:

  1. 使用time.sleep(5)进行睡眠(Con:3秒可能会不必要地浪费)
  2. 旋转一圈,直到窗口出现在屏幕上。 PyAutoGUI提供locateOnScreen函数,可用于查明窗口是否实际出现在屏幕上。 (但是,这是CPU密集型的,并且该功能本身是CPU密集型的,并且需要大约2秒才能返回)
  3. 所以它看起来[1]对我来说是一个更好的选择。还有其他一些我可能错过的技术会比这两种方法更好吗?感谢。

2 个答案:

答案 0 :(得分:5)

对于Windows,仅GUI自动化pywinauto功能更强大(和pythonic)。它隐式等待一些默认时间并允许显式等待(内部有一些CPU非密集循环:0.1秒暂停并快速检查更改,然后再等待)。

PyAutoGUI locateOnScreen函数使用屏幕截图的高级分析。这就是为什么它如此CPU密集(但跨平台)。

pywinauto示例:

from pywinauto import Application

app = Application(backend="win32").start(u'your_app.exe')
app.MainWindow.menu_select(u'File->Open')

app.OpenDialog.Edit.set_edit_text(u'some path')
app.OpenDialog.Open.click()
app.OpenDialog.wait_not('visible', timeout=10)

new_main_window = app.window(title_re='^.* - The Software$')
new_main_window.wait('ready', timeout=15)

Getting Started Guide是学习pywinauto核心概念的一个很好的起点。

答案 1 :(得分:0)

我会选择选项1,但如果这是打开窗口所需的最短平均时间,我会睡2秒钟。 2秒后,我会检查窗口是否已经出现,如果没有,那么我会再次睡2秒钟。这可能比睡5秒钟节省更多时间。

但是,由于尝试检查窗口是CPU密集型且耗时,我认为等待5秒会比所有人更好。