为什么Pywinauto总能找到很多窗口,即使它只存在一个窗口?

时间:2016-02-19 04:58:55

标签: python pywinauto

from pywinauto import application

app=application.Application()
app.connect(title_re = "| Zero Hedge", found_index = 0)

app.window_().SetFocus()
app.window_().TypeKeys('{F6}')

我有两个主要问题:

  1. found_index完全控制了什么?因为每次我改变它的值,结果都会产生不同的结果。我如何决定它的价值以确保我获得我想要的东西,包含“|零对冲”的窗口?

  2. 代码有时会引发没有found_index的WindowAmbiguousError或者有很多不同的found_index值。但我很确定我只有一个标签包含“| Zero Hedge”的标签。为什么它总能检测到许多窗户?我该如何解决?

  3. 感谢您的帮助。 :)

2 个答案:

答案 0 :(得分:0)

请尝试在top_level_only=True来电中添加connectfound_index=0即可删除)。方法connect仅在某种意义上连接到应用程序进程(使用窗口标题找到进程,而不是必需的顶级窗口)。但该流程只包含一个顶级窗口(默认情况下app.window_()正在搜索顶级窗口,而connect则不会)。

避免含糊不清的另一种选择:

Application().connect(title='your title', class_name='Chrome_WidgetWin_1')

found_index不是消除歧义的唯一方法。我会说当其他标准不起作用时,它是最后的边界。

编辑:BTW,正如Roel所说,"a|b"表示"a""b"。因此,在您的情况下,"| Zero Hedge"表示"" (empty sting)"Zero Hedge"。有很多看不见的顶级窗户,上面有空标题。请谨慎使用|

任何符号的正确正则表达式为.*。点.表示任何符号,而星号*表示任意数量的重复。

您的情况应该如此:".*Zero Hedge"

答案 1 :(得分:0)

您找到多个窗口,因为您使用正则表达式来匹配窗口标题,并且您的正则表达式恰好匹配任何字符串。 | Zero Hedge表示匹配" Zero Hedge"或空字符串。

要解决此问题,您需要转义|

app.connect(title_re = r"\| Zero Hedge")