【问题标题】:Handling "Windows Security" window with pywinauto使用 pywinauto 处理“Windows 安全”窗口
【发布时间】:2020-06-02 21:52:57
【问题描述】:

我正在编写一个程序来自动连接到Remote Desktop Connection。因此,到目前为止,我成功地启动并运行了应用程序,并将Computer Name 写入了文本框中。然后,我可以自动点击提交 btn。代码如下:

import pywinauto
from pywinauto.application import Application

app = Application().start("mstsc.exe")

computerName = "computer_name"
password = "password"

app['Dialog']['Edit'].type_keys(computerName, with_spaces=True)
app['Dialog']['Connect'].click()

这是完成上述所有工作的窗口:

点击Connect按钮后弹出的下一个是Windows Security,我需要输入密码(自动)。但是,我不确定,python 应该如何识别该窗口的控件,尤其是 Password 文本字段:

到目前为止,我试图通过它的标题来识别它,但没有成功:

windowsSecurity = pywinauto.findwindows.find_windows(title_re = r"Windows Security")

--------------------------------- 解决方案 --------------------------------

刚刚使用以下方式解决了问题。首先,我确定了弹出窗口的控件是什么,但在此之前,我要留出一些暂停时间让它浮出水面。其次,使用我已经确定的控件,我发送键并发送点击命令。这是我通过 dlg.print_ctrl_ids() 得到的控件列表

| | Edit - '' (L656, T323, R1100, B371) | | ['Surname, NameEdit', 'Edit'] | | child_window(auto_id="PasswordField_2", control_type="Edit") | | |

computerName = "computer"
password = "password"
app = pywinauto.application.Application(backend="uia")
app.start('mstsc.exe')

dlg = app.window(title_re="Remote Desktop Connection")
dlg['Edit'].type_keys(computerName)
dlg['Connect'].click()

time.sleep(5)

if dlg.child_window(title="Windows Security",control_type="Window").exists():

    windows_security = dlg.child_window(title="Windows     Security",control_type="Window")
    dlg['PasswordField_2'].type_keys(password)    
    dlg.child_window(auto_id='OkButton').click_input()
else:
    print("Wait time exceeded")

【问题讨论】:

  • 请将您的解决方案作为答案发布并接受。没关系,它会向其他人显示问题已解决。
  • @VasilyRyabov 我正在寻找那个,只是觉得看起来像蛇吃自己的尾巴))谢谢!

标签: python python-3.x windows pywinauto


【解决方案1】:

刚刚使用以下方式解决了这个问题。首先,我确定了弹出窗口的控件是什么,但在此之前,我要留出一些暂停时间让它浮出水面。其次,使用我已经确定的控件,我发送键并发送点击命令。这是我通过 dlg.print_ctrl_ids() 获得的控件列表

| | Edit - '' (L656, T323, R1100, B371) | | ['Surname, NameEdit', 'Edit'] | | child_window(auto_id="PasswordField_2", control_type="Edit") | | |

computerName = "computer"
password = "password"
app = pywinauto.application.Application(backend="uia")
app.start('mstsc.exe')

dlg = app.window(title_re="Remote Desktop Connection")
dlg['Edit'].type_keys(computerName)
dlg['Connect'].click()

time.sleep(5)

if dlg.child_window(title="Windows Security",control_type="Window").exists():

    windows_security = dlg.child_window(title="Windows         Security",control_type="Window")
    dlg['PasswordField_2'].type_keys(password)    
    dlg.child_window(auto_id='OkButton').click_input()
else:
    print("Wait time exceeded")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2022-08-10
    相关资源
    最近更新 更多