我如何使用 Pywinauto select Microsoft Office 对话框中的特定编辑控制器和 Python
How do I select a particular edit controller from Microsoft Office dialog box using Pywinauto and Python
我正在尝试创建一个 Python 脚本,它将使用提供的数据自动填充 Microsoft Word 的“创建来源”对话框中的期刊文章详细信息。
基本上,我想用包含“作者”、“标题”、“期刊名称”、“年份”等适当数据的变量以编程方式填充输入框
我正尝试使用 Pywinauto select 这些框。我已成功连接 Microsoft Word 并使用以下代码选择了“创建源”对话框:
app = Application(backend='uia').connect(title='Document1 - Word')
createSource = app.Document1Word.window(title='Create Source').print_control_identifiers()
上述代码中控件标识符的片段
| Edit - '' (L1278, T511, R1669, B525)
| ['EditorEdit', 'Edit10', 'EditorEdit0', 'EditorEdit1']
| child_window(auto_id="86", control_type="Edit")
|
| Edit - '' (L1278, T534, R1753, B548)
| ['PublisherEdit', 'Edit11', 'PublisherEdit0', 'PublisherEdit1']
| child_window(auto_id="93", control_type="Edit")
|
| Edit - '' (L1228, T563, R1763, B574)
| ['VolumeEdit', 'Edit12', 'VolumeEdit0', 'VolumeEdit1']
| child_window(auto_id="96", control_type="Edit")
现在假设,如果我使用 child_window(auto_id="93", control_type="Edit")
定位“发布者”。它第一次工作正常。但问题是这些 auto_id
每次程序甚至对话框重新启动时都会更改。例如,现在“Publisher”编辑框(输入框)的 auto_id="93"
,下一次可能是 57 或任何任意值。这会破坏整个脚本。
我在做什么:
app = Application(backend='uia').connect(title='Document1 - Word')
createSource = app.Document1Word.window(title='Create Source')
EditPublisherName = createSource.child_window(auto_id="93", control_type="Edit").wrapper_object()
EditPublisherName.set_edit_text("XYZ Publishers")
同样,上面的代码第一次运行得很好。它用“XYZ Publisher”字符串填充“Publisher”编辑框。但是,如果我重新启动对话框,此脚本将无法工作。而当我运行 .print_control_identifiers()
重启程序或对话框后,所有的 auto_ids 都会被改变。
有没有更好的方法来定位这些编辑框?
我假设,别名不会从一个 运行 另一个运行中改变。如果是这样,我们可以做这样的事情。
set_text=app.DialogName["PublisherEdit"].type_keys("XYZ Publishers")
需要尝试这样的事情
我正在尝试创建一个 Python 脚本,它将使用提供的数据自动填充 Microsoft Word 的“创建来源”对话框中的期刊文章详细信息。
基本上,我想用包含“作者”、“标题”、“期刊名称”、“年份”等适当数据的变量以编程方式填充输入框
我正尝试使用 Pywinauto select 这些框。我已成功连接 Microsoft Word 并使用以下代码选择了“创建源”对话框:
app = Application(backend='uia').connect(title='Document1 - Word')
createSource = app.Document1Word.window(title='Create Source').print_control_identifiers()
上述代码中控件标识符的片段
| Edit - '' (L1278, T511, R1669, B525) | ['EditorEdit', 'Edit10', 'EditorEdit0', 'EditorEdit1'] | child_window(auto_id="86", control_type="Edit") | | Edit - '' (L1278, T534, R1753, B548) | ['PublisherEdit', 'Edit11', 'PublisherEdit0', 'PublisherEdit1'] | child_window(auto_id="93", control_type="Edit") | | Edit - '' (L1228, T563, R1763, B574) | ['VolumeEdit', 'Edit12', 'VolumeEdit0', 'VolumeEdit1'] | child_window(auto_id="96", control_type="Edit")
现在假设,如果我使用 child_window(auto_id="93", control_type="Edit")
定位“发布者”。它第一次工作正常。但问题是这些 auto_id
每次程序甚至对话框重新启动时都会更改。例如,现在“Publisher”编辑框(输入框)的 auto_id="93"
,下一次可能是 57 或任何任意值。这会破坏整个脚本。
我在做什么:
app = Application(backend='uia').connect(title='Document1 - Word') createSource = app.Document1Word.window(title='Create Source') EditPublisherName = createSource.child_window(auto_id="93", control_type="Edit").wrapper_object() EditPublisherName.set_edit_text("XYZ Publishers")
同样,上面的代码第一次运行得很好。它用“XYZ Publisher”字符串填充“Publisher”编辑框。但是,如果我重新启动对话框,此脚本将无法工作。而当我运行 .print_control_identifiers()
重启程序或对话框后,所有的 auto_ids 都会被改变。
有没有更好的方法来定位这些编辑框?
我假设,别名不会从一个 运行 另一个运行中改变。如果是这样,我们可以做这样的事情。
set_text=app.DialogName["PublisherEdit"].type_keys("XYZ Publishers")
需要尝试这样的事情