我的情况与这篇文章类似。我正在使用 selenium 访问网页,导航到特定页面,然后单击打开打印对话框的链接。 我计划然后使用 pywinauto 连接到打印对话框来设置打印选项并打印文档,但我无法在打印对话框中找到 UI 元素。 当我使用 Inspect.exe 时,我可以很好地找到元素,但是当我执行连接到已打开的 crome 窗口然后打印的代码时,我无法找到 ui 元素。
执行以下代码时:
from pywinauto.application import Application
app = Application(backend="uia").connect(title_re=".*- Google Chrome -.*")
win = app.window(best_match="using pywinauto, how can I draw a rectangle arround a ui element?")
win.print_control_identifiers()
控件标识符不会显示任何看起来与我需要访问的 ui 元素相似的东西。
我能够在控件标识符树中找到的最多内容如下:
| Pane - 'Print' (L299, T78, R1622, B955)
| ['Print', 'PrintPane', 'Pane22']
| child_window(title="Print", control_type="Pane")
| |
| | Pane - '' (L299, T78, R1622, B955)
| | ['Pane23']
| | |
| | | Pane - '' (L299, T78, R1622, B955)
| | | ['Pane24']
| | | |
| | | | Pane - '' (L0, T0, R0, B0)
| | | | ['Pane25']
| | | |
| | | | Pane - '' (L306, T83, R1615, B946)
| | | | ['Pane26']
这似乎与“打印”对话框有关,但我找不到任何看起来像我需要与之交互的下拉菜单的内容。
任何指点将不胜感激,因为我已经为此苦苦挣扎了好几天。
Application
对象仅代表一个进程,还不是顶级窗口。所以需要反复寻找顶层窗口。
方法
timeout=0
中的默认 connect(...)
也存在一个已知问题,它有一个解决方法:显式使用它。但似乎第一点在这里更重要。
我建议尝试这种方式(它对我来说适用于英语语言环境和其他一些
title_re
值,所以请仔细检查我是否已正确地将脚本适应您的情况):
from pywinauto.application import Application
app = Application(backend="uia").connect(title_re=".*- Google Chrome -.*", timeout=10)
win = app.window(title_re=".*- Google Chrome -.*")
win.dump_tree() # output may be very large for top window
# combo box can be reached directly from top window, though it is slower
print(win.child_window(title="Destination", control_type="ComboBox").window_text())
# or this way:
child_win = win.child_window(best_match="using pywinauto, how can I draw a rectangle arround a ui element?")
child_win.dump_tree() # less large output