我正在使用 Python 的 PyAutoGUI 库来自动化 GUI。在我完成当前窗口中的数据输入后,我正在自动化的应用程序会打开一个新窗口。一切都由 python 自动化处理(我当前窗口中的数据输入和打开窗口所需的单击)。
在当前窗口中执行单击时,新窗口需要一些时间才能打开(可能在 2 到 5 秒之间)。所以我在这里可以想到两个选项:
- 使用
time.sleep(5)
sleep (缺点:可能会不必要地浪费 3 秒) - 紧密旋转直到窗口出现在屏幕上。 PyAutoGUI 提供了一个
locateOnScreen
函数,可用于查明窗口是否实际出现在屏幕上。 (但是,这是 CPU 密集型的,函数本身也是 CPU 密集型的,几乎需要 2 秒才能返回)
所以看起来 [1] 对我来说是更好的选择。有没有其他我可能错过的技术比这两种方法中的任何一种都更好?谢谢。
最佳答案
仅适用于 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 核心概念的良好起点。
关于python - 使用 Python 的 Windows 桌面 GUI 自动化—— sleep 与紧循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34361728/