bat+python实现easy connect自动连接

公司项目一直要用到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

  1. Windows GUI 自动化

    • 支持操作按钮、文本框、列表框等控件,模拟鼠标点击、键盘输入

    • 兼容 Win32 API(传统应用)和 UI Automation(现代 UWP/WPF 应用)双后端

  2. 跨版本兼容性

    • 支持 Windows 7 及以上系统,覆盖多数企业级应用场景
  3. 自动化流程控制

    • 可实现启动应用、输入文本、保存文件、关闭窗口等完整操作链
二、安装与基础使用

安装命令

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
相关推荐
明月醉窗台几秒前
Python-opencv批量处理文件夹中图像操作
开发语言·python·opencv
好家伙VCC4 分钟前
**发散创新:用 Rust实现游戏日引擎核心模块——从事件驱动到多线程调度的实战
java·开发语言·python·游戏·rust
m0_716430075 分钟前
JavaScript中类属性与原型属性的覆盖规则详解
jvm·数据库·python
m0_7349497910 分钟前
Redis如何降低快照对CPU的影响_合理分配RDB执行时机避开业务高峰期
jvm·数据库·python
Dxy123931021615 分钟前
Python在图片上画圆形:从入门到实战
开发语言·python
小江的记录本16 分钟前
【系统设计】《2026高频经典系统设计题》(秒杀系统、短链接系统、订单系统、支付系统、IM系统、RAG系统设计)(完整版)
java·后端·python·安全·设计模式·架构·系统架构
m0_3776182325 分钟前
HTML怎么显示速率限制重置时间_HTML X-RateLimit-Reset解析【说明】
jvm·数据库·python
鱼人25 分钟前
Web Components:未来的前端组件化标准?
前端
果汁华29 分钟前
Chrome DevTools MCP:让 AI 编码助手拥有浏览器调试超能力
前端·人工智能·chrome devtools
u01091476032 分钟前
C#怎么实现OAuth2.0授权_C#如何对接第三方快捷登录【核心】
jvm·数据库·python