首页 > 解决方案 > 从基于 C# 的应用程序执行 Pywinauto 脚本很慢

问题描述

5月7日更新,历史信息在“****************************”行下

@Jakub Sowa 我无法在您的下方添加任何评论,我尝试了 top_window 和 children(),它似乎对我不起作用。狐狸示例 tp = cg.appConnect().top_window() tp.children(title="finance", control_type="Button").draw_outline()

错误发生如下-- AttributeError: 'list' object has no attribute 'draw_outline'

那么你能给我一个具体的例子来说明它在你的情况下是如何工作的吗?


我已经做了几个月的 pywinauto 自动化,但是对于某些代码它运行缓慢,例如:

我单击以下代码中的确认按钮:

self.dlg = cg.appConnect().window(title="Hygine_Platform", control_type="Window")

self.regdlg = self.dlg.child_window(title ="registry", auto_id ="FormRegBalance", control_type="Window") 

self.okbtn = self.regdlg.child_window(title="confirm",auto_id="btnOk",control_type="Button")

def clickConfSettle(self):

self.okbtn.click_input()

如果我使用 clickConfSettle(),至少需要五秒钟才能完成。有没有人有同样的问题,有什么解决办法吗?我检查了控件的结构,它很简单,只有 3 个级别。

标签: pythonc#performance

解决方案


我已经使用该库一两个星期了,但我认为如果您尽快获得顶部窗口的窗口规范及其子窗口,那么您的 应用程序应该self.app.top_window().children()在哪里运行得更快。apppywinauto.Application(backend='uia', allow_magic_lookup=False).connect(handle=self.handle)

它使 dict 查找远离您,但是,您仍然可以通过索引访问项目或迭代它们(在我的情况下,这比使用child_window方法快得多)。我不确定点击部分,因为它可能需要更多时间,但在大多数情况下 - 我的程序中的所有查找在更改后都低于 1 秒。


推荐阅读