xdxgkxq 发表于 2022-11-15 16:00

自动连接校园网-自动登录EasyConnect

作为一个大学牲在校外访问教务处等校内网站时需要使用软件EasyConnect连接校园vpn,但是没有记住密码的功能,每次都需要手动输入账号密码,所以就用python写了点,通过模拟鼠标键盘自动点击来实现自动登录。(不是CS专业,学点pthon只是点兴趣,只会点皮毛,有错误还烦请大佬指正)
导入库:
```
from cmath import inf
from ctypes import *
from telnetlib import PRAGMA_HEARTBEAT
import win32gui
import win32api
import win32con
import os
from time import sleep
```

自己的登录账号与密码保存在代码所在目录的login.txt文件夹中
读取账号与密码:
```
def get_info():
    with open("login.txt") as lg:
      info = lg.readlines()
      info = info.strip()
      return info
```

```
def Easyconnect():
    '''打开应用'''
    dir = "C:\\Program Files (x86)\\Sangfor\\SSL\\SangforCSClient\\SangforCSClient.exe"
    os.startfile(dir)
    sleep(5)
               
def setpos(h):
    '''根据句柄设置鼠标坐标至窗体中央'''
    left, top, right, bottom = win32gui.GetWindowRect(h)
    pos =
    win32api.SetCursorPos(pos)


def get_son_windows(parent):
    hWnd_child_list = []
    win32gui.EnumChildWindows(
      parent, lambda hWnd, param: param.append(hWnd), hWnd_child_list)
    return hWnd_child_list
```

分别模拟鼠标与键盘点击:
```
def mouse():
    '''模拟鼠标点击'''
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,
                         0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,
                         0, 0, 0, 0)
    sleep(0.08)


def keyboard(val):
    '''模拟键盘点击'''
    win32api.keybd_event(val, 0, 0, 0)
    win32api.keybd_event(val, 0, win32con.KEYEVENTF_KEYUP, 0)
    sleep(0.02)
```


将从txt读入的字符转换为对应键位代码方便模拟点击:
因为我们学校的密码固定只有@字符,所以只对@做了特殊处理,其他像!#¥%这种没有考虑。所以只能正常处理小写英文字母、数字和@,其他会出错。
```
def inputchar(blank):
    for c in blank:
      print(ord(c))
      if (c == '@'):
            win32api.keybd_event(16, 0, 0, 0)
            win32api.keybd_event(50, 0, 0, 0)
            win32api.keybd_event(50, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(16, 0, win32con.KEYEVENTF_KEYUP, 0)
      c = ord(c)
      if ('a' <= chr(c) <= 'z'):
            c -= 32
      keyboard(c)
```

查找软件窗口:
```
hwnd_title = dict()


def get_all_hwnd(hwnd, a):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
      hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})


def get_handle():
    win32gui.EnumWindows(get_all_hwnd, 0)
    for h, t in hwnd_title.items():
      if (t == "EasyConnect"):
            return h
```

运行部分:
```
if __name__ == "__main__":
    info = get_info()
    Easyconnect()
    ec_handle = get_handle()
    sonlist = get_son_windows(ec_handle)
    for i, h in enumerate(sonlist):
      if (i == 22):
            setpos(h)
            mouse()
            inputchar(tuple(info))
      elif (i == 24):
            setpos(h)
            mouse()
            inputchar(tuple(info))
            keyboard(13)
            break
```

zjcasdfghjkl 发表于 2022-11-25 00:11

wkdxz 发表于 2022-11-15 20:28
哪里这个已经很好了有个库pyautogui 能很快的实现键鼠点击,执行快捷键也很方便

pywin32和pyautogui都可以实现键鼠点击,python的库真是丰富:Dweeqw,感觉对python更有信心了

xdxgkxq 发表于 2022-11-15 21:28

wkdxz 发表于 2022-11-15 20:28
哪里这个已经很好了有个库pyautogui 能很快的实现键鼠点击,执行快捷键也很方便

谢谢大佬指点,我去看看

Aerberter 发表于 2022-11-15 16:12

非常实用对于学校学生

chen297 发表于 2022-11-15 16:13

谢谢分享

lhp462 发表于 2022-11-15 16:14

楼主是否考虑过研究一下协议,如果可以脱离模拟点击就更好了,不过也很棒了

kurage7 发表于 2022-11-15 16:14

好耶!感谢楼主分享:victory:

lemon123654 发表于 2022-11-15 16:14

这个挺实用的啊

yifenmanyufan 发表于 2022-11-15 16:15

非常实用对于学校学生

JYY1 发表于 2022-11-15 16:15

谢谢分享,学习了学习了

TearApart 发表于 2022-11-15 16:17

感谢楼主分享!!!

gyz2005011 发表于 2022-11-15 16:17

学习,谢谢分享
页: [1] 2 3 4 5 6 7
查看完整版本: 自动连接校园网-自动登录EasyConnect