pyautogui实现自动连接GP VPN

news2024/12/29 9:36:21

支线小小项目(pyautogui实现自动连接GP VPN)

用了pyautogui做了一个懒人小脚本,主要是在家上班,每天要连公司vpn, 然后还要等好久,公司用的GP(global protect) VPN, 长这个样子
在这里插入图片描述
主要问题每次点击connect后需要等他先出来windows NT的login认证,然后在等一会才出来RSA的login, 而RSA的秘钥要从这个里面获取,然后再填进去。
在这里插入图片描述
最后终于连上了,还要调整gateway,整个过程比较费时,所以做了一个小脚本,放在github上了,需要的可以去拿(麻烦star一下),然后改一改就可以实现你自己的小功能了。

源码如下:

# 这是一个分支项目
# pyautogui实现自动连接GP(global protect)

import pyautogui as pg
import time
import os

# Main steps:
# 1. find GP icon->left click-> if already connected -> check if no-split -> if yes -> exit, if not -> func(choose no-split).
# 2. if not connected/connect failed status --> go to func(connect)
# 3. wait for prompt of NT login window
# 4. func(sign in pwd) - click pic center - typewrite(pwd) - moveRel - click sign on
# 5. get RSA credential from func(rsa) - rsa copy(mvoeRel(0,75)) - ctrl+V
# 6. func(sign in rsa window) - check if cert_confirm - click ok
# 7. wait for GP connected status --> check if gp no-split

NT_PASSWD = 'Ballball15'
RSA_PASSWD = '10538185'

def click_center(png, x_offset=0, y_offset=0, showed=True):
    """
    Used to click the center of a picture and also provide following function:
    1. Use x_offset,y_offset to click somewhere around center position,
    2. Use "showed" flag to mark if need to wait for the ICON/PROMPT showup before click it.
    3. Return the center position(x,y).
    """
    try:
        # first check if need to wait ICON/PROMPT showup
        # if ICON/PROMPT is there then get its position
        if showed:
            x1, y1 = pg.locateCenterOnScreen(png)
        else:
            # if ICON/PROMPT is not there then waiting it showup
            number = 0
            while (not showed):
                showed = pg.locateCenterOnScreen(png)
                number += 1
                print(f'Waiting {png} for {number} times')
            x1, y1 = showed[0], showed[1]
 
        # click the center position or somewhere around it
        pg.click(x1+x_offset, y1+y_offset, button='left')
        # return back center position
        print(f'{png} position({x1},{y1})')
        return (x1, y1)
    except Exception as e:
        print(f'Cannot find {png} in your Screen.')


def signin(temp=None):
    # mvoe mouse to input login passwd info
    x1, y1 = click_center('.\GP_login_signon.png', 0, -50, showed=False)
    # check if it is NT login or RSA login
    if temp:
        pg.typewrite(temp)
    else:
        pg.hotkey('ctrl', 'v')
    # click "sign on" button
    pg.click(x1, y1, button='left', duration=0.5)
    time.sleep(2)
    # click the certification confirm dialog
    click_center('.\cert_confirm.png', 0, 0, showed=False)


def get_rsa(token):
    click_center('.\RSA_icon.png', 0, 0, showed=True)
    time.sleep(1)
    click_center('.\RSA_main.png', 0, 0, showed=True)
    pg.typewrite(token)
    pg.press('enter')
    # move to copy button
    click_center('.\RSA_copy.png', 0, 0, showed=True)

def choose_GP(x, y):
    # check if no-split is connected
    if (pg.locateOnScreen('.\GP_nosplit.png')):
        print('No Split is connected! Enjoy it!')
    # if not then choose no-split
    else:
        print('changing gateway')
        # click the "Change Gateway"
        pg.click(x+100, y-95, button='left', duration=1)
        # go to the search box
        pg.click(x+100, y-320, button='left', duration=1)
        pg.typewrite('no')
        # click the "no split"
        pg.click(x+100, y-292, button='left', duration=1)
        print('Done, enjoy it.')


def connect_GP(x, y):
    # find and click "connect"
    pg.click(x+85, y-50, button='left')
    # time.sleep(5)
    # GP login with NT
    signin(NT_PASSWD)
    get_rsa(RSA_PASSWD)
    # GP login with RSA
    signin()


if __name__ == '__main__':
    # check if GP icon is gray(notconnected or connectfailed)
    gray_gp = click_center('.\gray_GP1.png', 0, 0, showed=True) or click_center('.\gray_GP2.png', 0, 0, showed=True)
    blue_gp = click_center('.\GP_blue.png', 0, 0, showed=True)
    # if not connected then do connection flow
    if (gray_gp):
        gp_x, gp_y = gray_gp[0], gray_gp[1]
        connect_GP(gp_x, gp_y)
        time.sleep(10)
        click_center('.\GP_blue.png', 0, 0, showed=False)
        choose_GP(gp_x, gp_y)
    # if connected then check if no-split is choosen
    elif (blue_gp):
        # get GP icon position using blue icon
        gp_x, gp_y = blue_gp[0], blue_gp[1]
        choose_GP(gp_x, gp_y)
    else:
        os.system('taskkill /IM PanGPA.exe /F')
        # time.sleep(6)
        pg.moveTo(1300, 1056)
        pg.moveRel(500, 0, duration=0.5)
        print('Cleared unknown status, please retry')

图片内容在GITHUB:

https://github.com/peanutfisher/GPAutoConnect.git
最终效果: (gif太大了,放张截图吧)
在这里插入图片描述



pyautogui的中文说明书参照下面

https://github.com/asweigart/pyautogui/blob/master/docs/simplified-chinese.ipynb
英文的是这个:
https://pyautogui.readthedocs.io/en/latest/quickstart.html#general-functions

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/617908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web安全总结

目录 网站架构一般web服务器结构相比于传统的网络攻击,基于web的攻击有什么不同?HTTP协议HTTP响应拆分攻击HTTPS针对HTTPS协议的攻击那么如何保证证书的唯一性? HTTP会话Cookie和Session的关系HTTP会话攻击解决方案 Web访问中的隐私问题Web应…

【读书笔记】《贫穷的本质》- [印度] Abhijit Banerjee / [法] Esther Duflo

文章目录 前言第一章 再好好想想第一部分 生活案例第二章 饥饿人口已达到10亿?第三章 提高全球居民健康水平容易吗?第四章 全班最优 前言 扶贫政策方面充斥着会取得立竿见影的效果的泡沫,事实证明这一点儿也不奇怪。要想取得进展,…

sed:命令讲解一

sed的使用: sed的使用 一、sed1.定义:2.工作流程:读取,执行,显示。3.基本操作格式:4.sed操作符:5.扩展: 一、sed 1.定义: 一种流编辑器,会在编辑器处理数据…

浅谈发改委强化电力需求侧管理缓解电力系统峰值压力方案设计 安科瑞 许敏

摘要:近年来全国用电负荷特别是居民用电负荷的快速增长,全国范围内夏季、冬季用电负荷“双峰”特征日益突出,恶劣气候现象多发增加了电力安全供应的压力。具有随机性、波动性、间歇性特征的可再生能源大规模接入电网对电力系统的稳定性带来新…

MySQL 索引及查询优化总结

一个简单的对比测试 前面的案例中,c2c_zwdb.t_file_count表只有一个自增id,FFileName字段未加索引的sql执行情况如下: 在上图中,typeall,keynull,rows33777。该sql未使用索引,是一个效率非常低…

chatgpt赋能python:Python安装HanLP:一个强大的NLP工具

Python安装HanLP:一个强大的NLP工具 HanLP是一个基于Python编写的神经网络自然语言处理工具,它提供给我们强大的文本处理和分析能力。在这篇文章中,我们将介绍如何在Python中安装并使用HanLP工具。如果你是一个文本处理和分析的爱好者或者工…

chatgpt赋能python:Python安装到U盘——实现随时随地的编程

Python安装到U盘——实现随时随地的编程 Python是一种广泛使用的动态解释型编程语言,简单易学,适用性广泛,被广泛应用于数据分析、Web开发、人工智能等领域。想要充分发挥Python的优势,随时随地进行编程,我们可以将Py…

人工智能正迎来量子飞跃——

光子盒研究院 6月1日,量子计算领域的行业领导者IonQ公布了其应用量子计算机模拟人类认知的一项早期研究结果。这篇论文描述了世界上第一个公开的方法:研究团队已将一个基本的人类认知模型在量子硬件上运行,这为模仿人类思维方式的改进决策模型…

Day_42哈希表

目录 一. 关于哈希表 二. 如何实现哈希表 1. 散列函数 2. 散列表 3. 散列函数的构造方法 4. 处理冲突的方法 三. 代码实现 1. 构造函数构造哈希表 2. 哈希表的查找 四. 代码展示 五. 数据测试​编辑 六. 总结 一. 关于哈希表 在前面介绍的线性表的查找中,记录在表中的位置…

RabbitMQ入门案例之Simple简单模式

RabbitMQ入门案例之Simple简单模式 前言什么是Simple模式Simple模式操作RabbitMQ管理界面的部分介绍 前言 本文将介绍RabbitMQ的七种工作模式的第一种Simple模式的代码实现,编程工具使用的是IDEA,在RabbitMQ中的工作模式都是生产消费模型 生产者消费模型…

Android系统的Ashmem匿名共享内存子系统分析(4)- Ashmem子系统的 Java访问接口

声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较…

【云原生】Docker镜像的创建

1.Dokcer镜像的创建 创建镜像有三种方法,分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 1.1 基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改 docker run -it --name web centos:7 /…

2023年6月 国内大语言模型对比【国内模型正在崛起】

先说一下这个文章怎么来的。因为朋友问我大语言模型可以生成公务员面试回答不,我说可以啊。之前看文心有这个服务。我想最近好几个模型也没用了测一把!结果!大吃一惊!我觉得我的三个傻孩子长大了!(chatglm1…

chatgpt赋能python:Python如何降低版本:提升代码兼容性与SEO效果

Python如何降低版本:提升代码兼容性与SEO效果 在大多数情况下,使用Python的最新版本是最好的选择。新版本通常提供更好的性能和更多的功能,同时也有更好的安全性和稳定性。然而,有些情况下,我们需要运行旧版本的Pytho…

chatgpt赋能python:Python字体如何调大?一篇全面的教程

Python字体如何调大?一篇全面的教程 什么是Python? Python是一种高级编程语言,一般被用于Web开发、数据分析和人工智能等领域。其编写简单、易读易学易维护,因此被广泛使用。 为什么要调大Python字体? 在Python编程…

imagine 关键词绘图( Midjourney )

前几天从网上看到的imagine 关键词绘图( Midjourney ),感觉挺好用,分享给大家: 一、基本关键词: 一个基本的提示可以简单到一个单词、短语或表情符号。 二、高级关键词: 可以包括一个或多个图像链接、多个文本短语或单词,以及…

内网安全:隧道技术详解

目录 隧道技术 反向连接技术 反向连接实验所用网络拓扑图及说明 网络说明 防火墙限制说明 实验前提说明 实战一:CS反向连接上线 - 拿下Win2008 一. 使用转发代理上线创建监听器 二. 上传后门执行上线 隧道技术 - SMB协议 SMB协议介绍 实战二&#xff1a…

chatgpt赋能python:Python安装到C盘有什么方便之处?

Python安装到C盘有什么方便之处? 在进行Python编程时,安装Python到C盘是一个非常常见的做法。那么,将Python安装到C盘有哪些好处呢?下面,让我们来一一介绍。 1. 方便快捷 安装Python到C盘的好处之一就是非常方便&am…

chatgpt赋能python:Python安装etree:提高XML处理效率的关键

Python安装etree:提高XML处理效率的关键 在Python开发中,XML是一种常用的数据格式。然而,Python标准库自带的ElementTree在大规模数据处理时可能会出现效率低下的情况。因此,我们可以使用第三方模块etree来提高XML处理的效率。 …

案例37:基于Springboot旅游网站系统开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…