我正在使用Python的PyAutoGUI库来自动化GUI。在完成当前窗口的数据输入之后,我正在自动化的应用程序将打开一个新窗口。所有事情都由python自动化来处理(在当前窗口中输入数据以及打开窗口所需的单击)。
当在当前窗口中执行单击时,新窗口需要一段时间才能打开(这可能在2-5秒之间)。所以我可以在这里想到两种选择:
time.sleep(5)睡眠(Con: 3秒可能不必要地浪费)locateOnScreen函数,它可以用来确定窗口是否实际出现在屏幕上。(然而,这是CPU密集型的,函数本身是CPU密集型的,返回时间几乎是2秒)所以看起来1对我来说是个更好的选择。还有其他我可能错过的技术比这两种方法中的任何一种都好吗?谢谢。
发布于 2015-12-19 20:18:51
对于Windows,只有图形用户界面自动化( 碧昂斯 )的功能更加全面(和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)入门指南是学习pywinauto核心概念的良好起点。
发布于 2022-03-02 21:20:17
我想你可以使用pyautogui.getAllWindows()。此函数返回所有窗口及其句柄。因此,您可以检查何时添加了新窗口。见此:
windows=pyautogui.getAllWindows()
windows_count=len(windows)
while True:
new_windows_count=pyautogui.getAllWindows()
if len(new_windows_count)!=windows_count:
break此外,您还可以使用所需窗口的句柄数来激活所需的窗口并将其带到前台:
desired_window=pyautogui.Window(#enter window handle number)
desired_window.activate()我认为更容易的另一种方法是pyautogui.getActiveWindowTitle()。此函数返回活动窗口的标题。也许你可以用它作为休息条件。
while True:
title=pyautogui.getActiveWindowTitle()
if title== "your desired window's title":
break发布于 2015-12-18 18:41:55
我会选择第一个选项,但如果这是打开窗口所需的最小平均时间,我将睡2秒。2秒后,我会检查窗口是否已经出现,如果没有,我将再次睡眠2秒。这可能比睡觉5秒节省更多的时间。
但是,由于尝试检查窗口是CPU密集型和耗时的,我认为等待5秒将是最好的。
https://stackoverflow.com/questions/34361728
复制相似问题