使用Python的Windows桌面graphics用户界面自动化 – 睡眠vs紧密循环

我正在使用Python的PyAutoGUI库来自动化GUI。 在我当前窗口完成数据input后,自动运行的应用程序将打开一个新窗口。 一切都由Python自动化(数据input在我当前的窗口和打开窗口所需的点击)照顾。

在当前窗口中执行单击操作时,新窗口需要一些时间才能打开(范围可能为2 – 5秒)。 所以在这里我可以想到两个select:

  1. 睡眠使用time.sleep(5) (骗人:3秒可能会被浪费不必要的)
  2. 旋转,直到窗口出现在屏幕上。 PyAutoGUI提供了一个locateOnScreen函数,可以用来确定窗口是否实际出现在屏幕上。 (但是,这是CPU密集型的,function本身是CPU密集型的,需要将近2秒才能返回)

所以看起来[1]对我来说是更好的select。 有没有其他的技术可能会错过,比这两种方法都好? 谢谢。

Solutions Collecting From Web of "使用Python的Windows桌面graphics用户界面自动化 – 睡眠vs紧密循环"

对于Windows只有GUI自动化pywinauto是一个更全面的功能(和pythonic)。 它隐式地等待一些默认的时间,并允许明确的等待(一些CPU非密集循环在里面:暂停0.1秒,快速检查变化,然后再等待)。

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

pywinauto例子:

 from pywinauto import Application app = Application().start(u'your_app.exe') app.MainWindow.MenuSelect(u'File->Open') app.OpenDialog.Edit.SetEditText(u'some path') app.OpenDialog.Open.Click() app.OpenDialog.WaitNot('visible', timeout=10) new_main_window = app.Window_(title_re='^.* - The Software$') new_main_window.Wait('ready', timeout=15) 

入门指南是学习pywinauto核心概念的好起点。

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

但是,由于试图检查窗口是CPU密集型和耗时的,所以我认为等待5秒会更好。