如何绕过pywinauto的ElementAmbiguousError:有两个元素符合条件错误

2024-09-26 22:50:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

以下是我编写的代码:

# 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.WindowsSpecification。
但是,每当我尝试使用弹出窗口执行任何操作(例如设置焦点)时,都会出现以下错误:

pywinauto.findwindows.element模糊用户错误:有两个元素符合条件{'backend':'win32','process':32992}

有人知道我怎么解决这个问题吗


Tags: 代码nonetitlewindow按钮handlespwaexpression
1条回答
网友
1楼 · 发布于 2024-09-26 22:50:20

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

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

相关问题 更多 >

    热门问题