一、准备工作
pip install pywin32==228
下载应用程序spy++


二、拉起要登陆的应用
import os
import win32api
import win32con
import win32gui
import time
def open_exe(vpnPath):
win32api.ShellExecute(0, 'open', vpnPath, '','',1) # 拉起登录窗口
time.sleep(3)
open_exe('xx\FortiSSLVPNclient.exe')

三、打开spy++,获取句柄
拖动spy++左上角的指针,放到要登录的应用窗口上


得到窗口句柄和标题文本,通过它们获取到应用的句柄
loginHandle = win32gui.FindWindow('#32770', 'FortiClient SSLVPN') # 获取句柄
hwndChildList = []
# 遍历获取子句柄
win32gui.EnumChildWindows(loginHandle, lambda x, y: y.append(x), hwndChildList)
print(hwndChildList)
所有子句柄列表

四、获取子句柄,进行应用登录
按照上面获取主窗口句柄的方法,将spy++的指针放在要填写数据的地方,获取子句柄,查找该子句柄在上面所有子句柄列表中的索引位置

def find_window_login(serverAddress, username, password):
loginHandle = win32gui.FindWindow('#32770', 'FortiClient SSLVPN') # 获取句柄
hwndChildList = []
# 遍历,win32gui获取应用所有子句柄
win32gui.EnumChildWindows(loginHandle, lambda x, y: y.append(x), hwndChildList)
# 按照索引位置取到子句柄
serverAddressHandle = hwndChildList[4]
usernameHandle = hwndChildList[6]
passwordHandle = hwndChildList[8]
connectBtnHandle = hwndChildList[27]
win32gui.SendMessage(serverAddressHandle, win32con.WM_SETTEXT, None, serverAddress)
win32gui.SendMessage(usernameHandle, win32con.WM_SETTEXT, None, username)
win32gui.SendMessage(passwordHandle, win32con.WM_SETTEXT, None, password)
win32gui.SendMessage(connectBtnHandle, win32con.WM_LBUTTONDOWN, None, None)
win32gui.SendMessage(connectBtnHandle, win32con.WM_LBUTTONUP, None, None)
find_window_login('xxxx', 'xxx', 'xxx')
登录成功

这篇博客介绍了如何使用Python的win32api和win32gui库自动化登录过程。首先通过pip安装pywin32,然后拉起应用程序。利用Spy++获取登录窗口句柄和子句柄,接着遍历子句柄并设置输入字段,最后模拟点击登录按钮完成自动登录。

5844

被折叠的 条评论
为什么被折叠?



