如何使用pywinauto获取Cisco AnyConnect的属性文本?
获取pywinauto控件的属性文本(判断VPN连接状态)
我来帮你解决用pywinauto获取VPN连接状态文本的问题,结合你已经输出的控件标识符,咱们一步步操作:
首先,pywinauto里获取控件文本最常用的是window_text()方法(部分控件也可以用text(),如果前者没结果可以试试后者)。你已经通过print_control_identifiers()拿到了所有控件的定位信息,接下来只需要定位到目标控件,调用方法就能拿到文本。
方法1:通过控件的标题和类名精准定位
从你的控件输出看,那个Edit控件(标题为"Brock AppDMZ VPN")应该是显示连接状态的地方,你可以这样定位并获取文本:
# 定位到目标Edit控件 edit_ctrl = window.child_window(title="Brock AppDMZ VPN", class_name="Edit") # 获取控件的文本内容 connection_status = edit_ctrl.window_text() print(connection_status)
如果VPN连接后这个文本会变成"Connected to Brock AppDMZ VPN",直接判断字符串里是否包含"Connected to"就能知道连接状态了。
方法2:用控件别名快速定位
pywinauto会给每个控件生成别名(就是你输出里方括号里的那些名称),比如那个Edit控件的别名是Edit或者Connected to Brock AppDMZ VPN.Edit,你可以直接用别名调用控件:
# 用别名获取Edit控件 edit_ctrl = window.Edit # 获取文本 connection_status = edit_ctrl.window_text() # 判断连接状态 if "Connected to" in connection_status: print("VPN已成功连接") else: print("VPN未连接或处于其他状态")
额外提示:ComboBox控件的文本获取
如果你的连接状态是显示在ComboBox里,除了window_text(),还可以用get_value()方法获取选中项的文本:
combo_ctrl = window.child_window(title="Brock AppDMZ VPN", class_name="ComboBox") combo_status = combo_ctrl.get_value() print(combo_status)
最后把这些代码整合到你的原有代码里,完整示例如下:
import pywinauto pwa_app = pywinauto.application.Application() path = r'C:\Users\me\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe' pwa_app.start(path) w_handle = pywinauto.findwindows.find_windows(title=u'Cisco AnyConnect Secure Mobility Client', class_name='#32770')[0] window = pwa_app.window_(handle=w_handle) window.SetFocus() # 获取连接状态文本 edit_ctrl = window.child_window(title="Brock AppDMZ VPN", class_name="Edit") connection_status = edit_ctrl.window_text() # 判断并输出结果 if "Connected to" in connection_status: print(f"✅ VPN已连接:{connection_status}") else: print(f"⚠️ VPN当前状态:{connection_status}")
内容的提问来源于stack exchange,提问作者Walt Reed
相关产品推荐
相关产品推荐

