首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python的Windows桌面GUI自动化--睡眠与紧循环

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

Stack Overflow用户
提问于 2015-12-18 18:20:56
回答 3查看 10.3K关注 0票数 5

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

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

  1. 使用time.sleep(5)睡眠(Con: 3秒可能不必要地浪费)
  2. 在一个紧密的循环中旋转直到窗口出现在屏幕上。PyAutoGUI提供了一个locateOnScreen函数,它可以用来确定窗口是否实际出现在屏幕上。(然而,这是CPU密集型的,函数本身是CPU密集型的,返回时间几乎是2秒)

所以看起来1对我来说是个更好的选择。还有其他我可能错过的技术比这两种方法中的任何一种都好吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-19 20:18:51

对于Windows,只有图形用户界面自动化( 碧昂斯 )的功能更加全面(和pythonic)。它隐式地等待一些默认时间,并允许显式等待(一些CPU不密集的循环在里面:大约0.1秒的暂停和快速检查更改,然后再次等待)。

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

pywinauto示例:

代码语言:javascript
复制
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)

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

票数 5
EN

Stack Overflow用户

发布于 2022-03-02 21:20:17

我想你可以使用pyautogui.getAllWindows()。此函数返回所有窗口及其句柄。因此,您可以检查何时添加了新窗口。见此:

代码语言:javascript
复制
windows=pyautogui.getAllWindows()
windows_count=len(windows)
while True:
    new_windows_count=pyautogui.getAllWindows()
    if len(new_windows_count)!=windows_count:
        break

此外,您还可以使用所需窗口的句柄数来激活所需的窗口并将其带到前台:

代码语言:javascript
复制
desired_window=pyautogui.Window(#enter window handle number)
desired_window.activate()

我认为更容易的另一种方法是pyautogui.getActiveWindowTitle()。此函数返回活动窗口的标题。也许你可以用它作为休息条件。

代码语言:javascript
复制
while True:
    title=pyautogui.getActiveWindowTitle()
    if title== "your desired window's title":
        break
票数 2
EN

Stack Overflow用户

发布于 2015-12-18 18:41:55

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

但是,由于尝试检查窗口是CPU密集型和耗时的,我认为等待5秒将是最好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34361728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档