【问题标题】:How to getting around pywinauto's ElementAmbiguousError: There are 2 elements that match the criteria error如何绕过 pywinauto 的 ElementAmbiguousError:有 2 个元素符合条件错误
【发布时间】:2020-08-28 18:15:20
【问题描述】:

我正在尝试使用 python 和 pywinauto 自动运行 Rufus
到目前为止,我已经能够在 Rufus 的主屏幕上运行可执行文件并修改控件。
在我编写的代码单击“开始”按钮后,Rufus 会显示一个弹出窗口。 此弹出窗口警告您 USB 密钥的全部内容将被删除。 我无法做的是连接到该弹出窗口并在那里按“确定”按钮。

这是我写的代码:

# Connect to an existing window with title matching a regular expression
def ConnectWindow(exp):
  # Look for window matching regular expression
  try:
    handles = pwa.findwindows.find_windows(found_index=0, title_re=exp)
  except pwa.findwindows.WindowNotFoundError:
    handles = None
  # Make sure something was found
  if handles:
    # Make sure only one found
    if len(handles) > 1:
      print('Matched more than one window matching regular expression: {0}'.format(exp))
      sys.exit(1)
    # Return it!
    return pwa.Application().connect(handle=handles[0]).window()
  # Nothing found
  return None

popup = ConnectWindow('^Rufus$')
popup.set_focus()
pwa.keyboard.send_keys('{RIGHT}{ENTER}')

ConnectWindow 确实找到了窗口,并且弹出窗口的类型为 pywinauto.application.WindowSpecification。
但是,每当我尝试对弹出窗口执行任何操作(例如 set_focus)时,都会收到以下错误:

pywinauto.findwindows.ElementAmbiguousError: 有 2 个元素符合条件 {'backend ': 'win32', '进程': 32992}

有谁知道我该如何解决这个问题?

【问题讨论】:

  • 我看到你不接受别人的答案是正确的。它没有动力写答案。仅供参考。
  • @VasilyRyabov,我搜索了答案,但我一定找不到您所指的其他答案。非常抱歉。

标签: python criteria pywinauto ambiguous


【解决方案1】:

所有这些代码都可以写得更紧凑。请不要直接使用find_windows 函数。阅读Getting Started Guide,了解 WindowSpecification 的工作原理。

app = pwa.Application(backend="win32").connect(found_index=0, title_re=exp, timeout=10)
popup = app.window(found_index=0, title_re=exp)

popup.type_keys('{RIGHT}{ENTER}') # it calls .set_focus() inside

【讨论】:

  • 答案左侧的投票按钮下方有一个灰色复选框。它应该可以将答案标记为已接受。它将向滚动提要的其他人显示问题已解决。
  • 完成!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-07-06
  • 2021-07-13
  • 1970-01-01
  • 2016-12-04
  • 2017-10-21
  • 2012-05-26
  • 2013-11-20
相关资源
最近更新 更多