python - GUI 注销按钮策略更改自动化。 pywinauto.findwindows.ElementNotFoundError : error. 如何切换上下文?

标签 python pywinauto

enter image description here

我正在自动执行更改注销按钮策略的步骤。涉及的步骤是:

  1. 使用 gpedit.msc 打开本地组策略

  2. 从左侧 Pane 的“用户配置”>“管理模板”的下拉列表中选择“开始菜单和任务栏”

  3. 在右侧 Pane 中,双击“更改开始菜单电源按钮”

  4. 选择单选按钮“启用”

  5. 从选项下拉菜单中:选择“注销”

我已经完成了第三步,但在映射第二步中的“更改开始菜单电源按钮”时遇到问题。我的代码如下:

from pywinauto import Application

Application().start(r'mmc gpedit.msc') 
app = Application(backend="uia").connect(path='mmc.exe')
#app.LocalGroupPolicyEditor.dump_tree()

Admin_template = app.LocalGroupPolicyEditor.child_window(title="User 
Configuration", control_type="TreeItem").child_window(title="Administrative 
Templates", control_type="TreeItem") # since there are same templates 
Admin_template.double_click_input() # it expands the subtree
#Admin_template.dump_tree()

Start_menu = Admin_template.child_window(title="Start Menu and Taskbar", 
control_type="TreeItem").double_click_input()
Start_menu.dump_tree()
#Admin_template.child_window(title="Start Menu and Taskbar", 
control_type="TreeItem").dump_tree()

#Change_start_menu = Start_menu.child_window(title="Change Start Menu power 
#button", control_type="MenuItem").double_click_input()
#Change_start_menu.dump_tree()

我在查找和映射右 Pane 中的元素时遇到了困难。另外,当我使用 Start_menu.dump_tree() 时,仅显示“通知”元素。但是,其余部分(包括“更改开始菜单电源按钮”)是我接下来要双击的内容。

enter image description here

非常感谢您的帮助。谢谢。

最佳答案

这有点棘手,但这应该可以完成工作(它会执行您列出的所有步骤 - 按“确定” - 并关闭程序):

import pywinauto

pywinauto.Application().start(r'mmc gpedit.msc') 
app = pywinauto.Application(backend="uia").connect(path='mmc.exe')

admin_template = app.LocalGroupPolicyEditor.child_window(title="User Configuration", control_type="TreeItem").child_window(title="Administrative Templates", control_type="TreeItem")
admin_template.double_click_input()

start_menu = admin_template.child_window(title="Start Menu and Taskbar", control_type="TreeItem")
start_menu.double_click_input()

option_list = app.LocalGroupPolicyEditor.child_window(auto_id="12786", control_type="List")

# Just select any of the first options to change the focus to the list.
first_elem = option_list.child_window(title="Add Search Internet link to Start Menu", control_type="ListItem")
first_elem.click_input()

# Used to scroll down the window so that the wanted option becomes visible.
pywinauto.keyboard.send_keys("cccc")

option = option_list.child_window(title="Change Start Menu power button", control_type="ListItem")
option.double_click_input()

pop_up = app.LocalGroupPolicyEditor.child_window(auto_id="tableLayoutFullForm", control_type="Pane")

radio = pop_up.child_window(title="Enabled", auto_id="radioButtonEnabled", control_type="RadioButton")
radio.click_input()

drop_down = pop_up.child_window(title="Choose one of the following actions", auto_id="dropDownListChoose one of the following actions", control_type="ComboBox")
drop_down.click_input()

# 'Hack' to first select the Restart option and then the next option after that which starts with l (=Log off).
# This ensures that the correct setting gets set despite of what the setting was before.
pywinauto.keyboard.send_keys("rl{ENTER}")

ok = pop_up.child_window(title="OK", auto_id="buttonOK", control_type="Button")
ok.click_input()

app.kill()

确保以管理员身份运行此脚本,否则它将失败。

如果您对代码有任何疑问,请随时询问:)

 

编辑:

如果您运行的是 pywinauto <0.6.0 版本,则必须将 pywinauto.keyboard.send_keys() 的两次出现(第 19 行和第 34 行)替换为:

pywinauto.SendKeysCtypes.SendKeys()

如果这不起作用,您可以尝试:

pywinauto.keyboard.SendKeys()

关于python - GUI 注销按钮策略更改自动化。 pywinauto.findwindows.ElementNotFoundError : error. 如何切换上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55016053/

相关文章:

android - 无法通过 Android 应用程序访问笔记本电脑的本地主机

python - 使用 nltk pos 标记器时出现错误的 zip 文件错误

python - 如何消除 double_click_input() 操作的延迟?

python - Pywinauto - 如何阅读弹出窗口中的文本来识别它?

python --> pyinstaller - .exe 文件将返回 "test returned -1"

python - 连接字符串和变量值

python - re.groups() 什么也不返回

python - 如何按组应用功能?

python - 使用 pywinauto 查找 qwidget 对象文本

python - 在 python 中自动化 IE、MS-Office 设置验证的最佳方法