使用pywinauto自动安装软件时出错

2024-09-30 00:34:19 发布

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

搜索后,我无法找到良好的响应:

我正在尝试使用pywinauto自动化公司软件。我尽可能地使用app.print_control_identifiers()。这是上帝派来的!感谢Youtube上的人们和Vasily的帖子。请参阅下面的代码

在安装过程中,它希望安装一个MS VC++可再发行版本,我可以处理

下一个问题是告诉我Adobe Flash Player的版本(我知道是吗?)不兼容。我已经使用Inspect识别了需要单击以继续的OK按钮。以下是代码(为公众消费清理):

from pywinauto.application import Application
import time

app = Application(backend="uia").start("C:\\Users\\me\\program.exe")
time.sleep(5)
#This addresses the need to install Microsoft C++ Redistributable
dlg = app['program - InstallShield Wizard']
dlg.Install.click()
time.sleep(5)

#This is to get past an install failure and to move on
dlg.Yes.click()
time.sleep(10)

#This is a dialog box saying that some component is incompatible and this is where I am stuck
# And the window title now just says 'program' vs. 'program - InstallShield Wizard'
new_dlg = app['program']
new_dlg.OK.click()

以下是故障信息:

C:\Python37\python.exe C:/Users/me/PycharmProjects/myProject/pywinauto_install.py
Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\pywinauto\application.py", line 258, in __resolve_control
    criteria)
  File "C:\Python37\lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
    raise err
pywinauto.timings.TimeoutError

在处理上述异常期间,发生了另一个异常:

Traceback (most recent call last):

  File "C:/Users/me/PycharmProjects/myProject/pywinauto_install.py", line 23, in <module>
    new_dlg.OK.click()

  File "C:\Python37\lib\site-packages\pywinauto\application.py", line 379, in __getattribute__
    ctrls = self.__resolve_control(self.criteria)

  File "C:\Python37\lib\site-packages\pywinauto\application.py", line 261, in __resolve_control
    raise e.original_exception

  File "C:\Python37\lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
    func_val = func(*args, **kwargs)

  File "C:\Python37\lib\site-packages\pywinauto\application.py", line 203, in __get_ctrl
    dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0]))

  File "C:\Python37\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
    raise ElementNotFoundError(kwargs)

pywinauto.findwindows.ElementNotFoundError: {'best_match': 'program', 'backend': 'uia', 'process': 22184}

Process finished with exit code 1

我正在根据我看到的一篇文章创建新的_dlg,所以如果这是错误的,请拍拍我的手。我不是一个训练有素的开发人员。 谢谢


Tags: inpyapptimeapplicationlibpackagesline
1条回答
网友
1楼 · 发布于 2024-09-30 00:34:19

要检查顶级对话框窗口的文本,请打印以下内容:

print([w.window_text() for w in app.windows()])

然后将正确的代码作为dict键而不是app['program']复制到代码中。更灵活的方式看起来是这样的:

new_dlg = app.window(title_re="Program - .*")

相关问题 更多 >

    热门问题