公司项目一直要用到vpn,发现vpn连一两个小时后会断线,还会重新输入账号密码,一天要输入六七次,非常影响工作效率。于是想着能不能写一个脚本来帮我自动输入账号,密码,自动连接vpn。
1使用bat命令启动easyconnect
bat
@echo off //关闭回显
chcp 65001 //执行后,当前窗口即启用 UTF-8 编码
//下面一步需要找到你电脑上安装的easyconnect,并且启动
start /d "C:\Program Files (x86)\Sangfor\SSL\SangforCSClient" SangforCSClient.exe
timeout /T 1 /NOBREAK //**强制等待 1 秒且忽略用户按键**
好了,到这里已经能够自动打开easyconnct了
1使用python库pywinauto来模拟输入账号,密码,点击按钮
首先,介绍一下 pywinauto
-
Windows GUI 自动化
-
支持操作按钮、文本框、列表框等控件,模拟鼠标点击、键盘输入
-
兼容 Win32 API(传统应用)和 UI Automation(现代 UWP/WPF 应用)双后端
-
-
跨版本兼容性
- 支持 Windows 7 及以上系统,覆盖多数企业级应用场景
-
自动化流程控制
- 可实现启动应用、输入文本、保存文件、关闭窗口等完整操作链
二、安装与基础使用
安装命令
less
bash
复制
pip install pywinauto # 基础安装[1,5](@ref)
pip install pywinauto[uia] # 扩展 UIA 后端支持[6](@ref)
基础操作示例
less
python
复制
from pywinauto import Application
# 启动记事本并输入文本
app = Application(backend="uia").start("notepad.exe") # 推荐 UIA 后端[2,6](@ref)
main_window = app.window(title="无标题 - 记事本")
main_window.Edit.type_keys("Hello, Pywinauto!") # 文本输入[3,10](@ref)
# 保存文件
main_window.menu_select("文件->另存为") # 菜单操作
save_dialog = app.window(title="另存为")
save_dialog.Edit.set_text("example.txt") # 直接设置文件名[6](@ref)
save_dialog.Save.click() # 点击保存按钮
好,想了解更多请阅读[官方文档](What is pywinauto --- pywinauto 0.6.8 documentation) 接下来,我们使用pywinauto帮我们输入账号和密码,并自动点击登录
python
from pywinauto import application
from pywinauto import timings
import time
# 初始化应用程序对象
app1 = application.Application()
app2 = application.Application()
app3 = application.Application()
# 检测是否存在标题为"EasyConnect"的窗口
while True:
try:
app1.connect(title_re="EasyConnect", found_index=0)
window = app1.window(title_re="EasyConnect", found_index=0)
button = window.child_window(class_name="Button", found_index=0)
app2.connect(title_re="EasyConnect", found_index=1)
window = app2.window(title_re="EasyConnect", found_index=0)
# window.set_focus()
button = window.child_window(class_name="Button", found_index=0)
time.sleep(1)
# # 填写vpn地址
app3.connect(title_re="EasyConnect", found_index=0)
window = app3.window(title_re="EasyConnect", found_index=0)
edit_control = window.child_window(class_name="Edit", found_index=0)
edit_control.set_edit_text("https://122.144.215.2/")
# 填写账号密码
username_edit = window.child_window(class_name="Edit", found_index=1)
username_edit.set_edit_text("daicq_weic")
password_edit = window.child_window(class_name="Edit", found_index=2)
password_edit.set_edit_text("Stnc@123")
# 模拟点击登录按钮 (如果有)
login_button = window.child_window(class_name="Button", found_index=0)
login_button.click()
except Exception as e:
# print(str(e))
pass
完整代码如下
@echo
chcp 65001
start /d "C:\Program Files (x86)\Sangfor\SSL\SangforCSClient" SangforCSClient.exe
cd /c C:\Users\Administrator\Desktop
timeout /T 1 /NOBREAK
python -c '
from pywinauto import application
from pywinauto import timings
import time
# 初始化应用程序对象
app1 = application.Application()
app2 = application.Application()
app3 = application.Application()
# 检测是否存在标题为"EasyConnect"的窗口
while True:
try:
app1.connect(title_re="EasyConnect", found_index=0)
window = app1.window(title_re="EasyConnect", found_index=0)
button = window.child_window(class_name="Button", found_index=0)
app2.connect(title_re="EasyConnect", found_index=1)
window = app2.window(title_re="EasyConnect", found_index=0)
# window.set_focus()
button = window.child_window(class_name="Button", found_index=0)
time.sleep(1)
# # 填写vpn地址
app3.connect(title_re="EasyConnect", found_index=0)
window = app3.window(title_re="EasyConnect", found_index=0)
edit_control = window.child_window(class_name="Edit", found_index=0)
edit_control.set_edit_text("https://122.144.215.2/")
# 填写账号密码
username_edit = window.child_window(class_name="Edit", found_index=1)
username_edit.set_edit_text("daicq_weic")
password_edit = window.child_window(class_name="Edit", found_index=2)
password_edit.set_edit_text("Stnc@123")
# 模拟点击登录按钮 (如果有)
login_button = window.child_window(class_name="Button", found_index=0)
login_button.click()
except Exception as e:
# print(str(e))
pass
'
pause