python - 使用 Python 的 Windows 桌面 GUI 自动化—— sleep 与紧循环

标签 python windows ui-automation pyautogui

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

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

  1. 使用 time.sleep(5) sleep (缺点:可能会不必要地浪费 3 秒)
  2. 紧密旋转直到窗口出现在屏幕上。 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/

相关文章:

在两个具有嵌套键的字典之间进行映射的 Pythonic 方法

python - Pandas:编辑数据框的一部分,使其影响主数据框

python - 频率和百分比不均匀组 sns barplot

python - 如何将文件名传递给从 Python 执行的外部命令?

windows - 有没有任何解决方法可以在没有美国 SMS 号码的情况下注册 Windows azure 免费试用版?

ios - xcuitest- 尝试点击链接标签中的链接

.net - UI自动化中如何调用快捷键?/。网

android - 尝试使用 uiautomatorviewer 拍摄快照时出现“adb not installed”错误

python - Flask 隐藏输入未在模板中设置

linux - 在 linux 上使用 mingw 与 clang 交叉编译