pywinauto 自动进行远程桌面登陆 remote desktop connection

python 环境配置

需要安装pywinauto, 可以使用pip,具体过程,这里就不累述。
当安装完成,执行下

from pywinauto.application import Application

不报错,就说明安装成功

pywinauto 与application建立连接

官网这里显示了好几种建立
连接

这里采用如下

app = Application('uia').start(r'C:\WINDOWS\system32\mstsc.exe')

uia是一个backend参数,与这个windows dialog的底层实现有关。一般都是uia

在这个建立的过程中,app会解析出这个dialog的参数

pywinauto 定位元素,操作元素

如果操作dialog上的元素呢? 例如点击,输入文本等?

点击

获取到元素,调用click()方法就可以
可点击的元素,一般是Button类型的

输入文本

获取到元素,调用 set_edit_text 就可以。
可输入文本的元素,一般是type是EditL类型的。

获取元素

有一种我认为比较简单的写法,用于定位元素。
app[][]...
其中每个[]里面是dialog的名字,就是我们ui上看到的,也是我们在spy上看到的class name.

在这里,第一个dialog的名字是Remote Desktop Connection
如果是中文的话,填相应的中文,可以使用spy, copy其caption
以防止文字拼写错误。spy

有两种辅助方式,可以帮助我们定位到 准确的元素。一个是spy工具,
一个是pywinauto自带的print_control_identifiers
在这里插入图片描述

spy 辅助

如果电脑没有,这个需要安装。
操作步骤:

  • 打开spy
  • ctrl +f
  • drag
    在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述如上图所示,有的定位dialog是没有名称的。有的是有名称的。

print_control_identifiers

这个可以打印出dialog的具体信息,比如,我们想知道 想往computer里面输入机器号,
app[‘Remote Desktop Connection’][‘???’]

这里的???指的是 我们想定位的computer那里。
如果正确定位了,接下来我们只需要 app[‘Remote Desktop Connection’][‘???’].set_edit_text(“”) 就可以了

下面是remote desktop connection 打印出的信息
我们要找到computer的标签,其中,他的type应该是可编辑的Edit。

Control Identifiers:

Dialog - 'Remote Desktop Connection'    (L681, T177, R1239, B496)
['Dialog', 'Remote Desktop ConnectionDialog', 'Remote Desktop Connection']
child_window(title="Remote Desktop Connection", control_type="Window")
   | 
   | Static - 'Computer:'    (L704, T327, R792, B343)
   | ['Static', 'Computer:', 'Computer:Static', 'Computer:0', 'Computer:1', 'Static0', 'Static1']
   | child_window(title="Computer:", auto_id="5011", control_type="Text")
   | 
   | ComboBox - 'Computer:'    (L798, T321, R1114, B346)
   | ['Computer:2', 'ComboBox', 'Computer:ComboBox']
   | child_window(title="Computer:", auto_id="5012", control_type="ComboBox")
   |    | 
   |    | Edit - 'Computer:'    (L802, T325, R1090, B341)
   |    | ['Computer:Edit', 'Edit']
   |    | child_window(title="Computer:", auto_id="5012", control_type="Edit")
   |    | 
   | 
   | Static - 'Username:'    (L704, T363, R780, B379)
   | ['Static2', 'Username:', 'Username:Static']
   | child_window(title="Username:", auto_id="13063", control_type="Text")
   | 
   | 
   | Button - 'Connect'    (L1012, T449, R1112, B477)
   | ['Connect', 'Button3', 'ConnectButton']
   | child_window(title="Connect", auto_id="1", control_type="Button")

 

可以看到几个有关Computer

  • child_window(title=“Computer:”, auto_id=“5012”, control_type=“ComboBox”)
  • child_window(title=“Computer:”, auto_id=“5011”, control_type=“Text”)
  • child_window(title=“Computer:”, auto_id=“5012”, control_type=“Edit”)

我们需要使用第3个,因为其是edit的。

app['Remote Desktop Connection'].child_window(title="Computer:", control_type ="Edit").set_edit_text("connect_conputer")

整体的代码

下面是整体的代码,因为有dialog memory,我的一些信息就不用输入了。
加入time.sleep 是为了等待dialog UI 刷新完成。也可以使用
actionable_dlg = dlg_spec.wait(‘visible’)

app = Application('uia').start(r'C:\WINDOWS\system32\mstsc.exe')

#way 1
#dlg_spec = app.Remote
#way2 
#dlg_spec = app.window(title='Remote Desktop Connection')
# wait till the window is really open
#actionable_dlg = dlg_spec.wait('visible')

# 输入远程电脑名称
app['Remote Desktop Connection'].child_window(title="Computer:", control_type ="Edit").set_edit_text("我的远程电脑名称")
# 点击连接
app['Remote Desktop Connection']['Connect'].click()
time.sleep(3)
# 远程连接,电脑输入密码. 用户名有dialog memory,所以不用输入了
app['Remote Desktop Connection']['Windows Security'].child_window(auto_id="PasswordField_2", control_type="Edit").set_edit_text("password")
time.sleep(2)
# 点击Ok
app['Remote Desktop Connection']['Windows Security'].child_window(title="OK", auto_id="OkButton", control_type="Button").click()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值