我对Python相当陌生,无法识别希望使用pywinauto控制的GUI对象。
在this example之后,使用以下代码,我可以打开Notepad.exe并从菜单对象中选择“帮助”。
from pywinauto.application import Application
# Run a target application
app = Application().start("notepad.exe")
# Select a menu item
app.UntitledNotepad.menu_select("Help->About Notepad")
# Click on a button
app.AboutNotepad.OK.click()
# Type a text string
app.UntitledNotepad.Edit.type_keys("pywinauto Works!", with_spaces = True)
这很酷,但是我想将此应用到更实际的示例中。我想做的是使用app = Application().start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")
打开Excel,然后从启动Excel 2016时弹出的菜单窗格中选择“空白工作簿”,从而打开一个新工作簿。
我已使用UISpy定位了对象,并确定名称为“空白工作簿”。使用上面的示例代码,我应该执行的选择该对象以打开新工作簿的代码行是什么?更重要的是,我该如何自己找出这些信息?
我正在使用Python 3.6.1。在一个不相关的问题中-我发现可以不用完全限定的名称打开“ notepad.exe”很有趣,但是打开Excel需要app = Application().start(r"C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE")
-我不确定为什么会这样,但是再提一个问题...
答案 0 :(得分:0)
您可以使用 SWAPY、pyinspect 等外部工具来识别对象名称。 完整列表可在此处找到:https://pywinauto.readthedocs.io/en/latest/getting_started.html
关于python的用法,您可以在每个pywinauto对话框对象上触发print_control_identifiers()函数。该函数显示了对话框的所有对象:按钮/标签/复选框等。你可以通过这里阅读它: https://pywinauto.readthedocs.io/en/latest/code/code.html#controls-reference
所以基本上,尝试 app.print_control_identifiers() 检查按钮的名称是否在那里,如果它只是使用 getattr(app, X).click() 而 X 是按钮的名称。
答案 1 :(得分:0)
这是在 EXCEL 中打开空白工作簿的代码片段。
from pywinauto import Application
import time
app = Application(backend="uia")
excelApp = app.start(r"C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE")
time.sleep(5)
wind = excelApp.windows()
title = wind[0].get_properties()[u'texts']
handle = excelApp.window(title = title[0])
child = handle.child_window(auto_id="AIOStartDocument")
child.click_input()
另外,你应该使用wait()方法而不是sleep time,这是一个更好的做法。
如果您手动打开 excel 并按 ALT 键,您将找到快捷方式。
from pywinauto.application import Application
app = Application().start(cmd_line=u'"C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE" ')
xlmain = app.Excel
xlmain.wait('ready')
xlmain.type_keys("%L")