实现校园网开机自启动部署

❤️博客主页 iknow181
🔥系列专栏 PythonJavaSEJavaWebCCNP
🎉欢迎大家点赞👍收藏⭐评论✍


在这里插入图片描述

目录

一.准备工作

1、IDE安装

2、安装Selenium

1.介绍

2.下载

3、安装pywifi

1.介绍

2.下载

4、下载浏览器驱动

二、登录校园网

1、打开浏览器

2、在网页中输入信息

3、对网页进行点击

4、打开并登录校园网

三、打开网卡

四、完整程序

五、设置开机自启动

自启动方法一:系统自启动

自启动方法二:注册服务

1、打包成exe文件

a.概述

b.安装 PyInstalle

c.PyInstaller生成可执行程序

2、注册服务


一.准备工作

  在开始之前,我们需要一些准备工作,一个能够编写并运行python代码的IDE(如:PyCharm)、安装Python第三方函数库 Selenium、安装Python第三方函数库 pywifi、安装浏览器驱动。

1、IDE安装

网上教程太多了,而且也没什么大问题,这里就不过多阐述了。

2、安装Selenium

1.介绍

Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。

2.下载

这里建议用selenium4.1.1版本,因为我发现高版本会报错,这个版本就没什么问题

下载清华镜像(快一点)

pip下载:打开命令提示符,输入下载命令:

 pip install selenium==4.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple/

3、安装pywifi

1.介绍

pywifi是在python中一个用于操作无线接口的模块,可以跨平台使用,Windows和Linux都支持

2.下载

pip下载:打开命令提示符,输入下载命令:

 pip3 install pywifi

由于此模块基于comtypes模块,因此同时需要下载此模块:

 pip3 install comtypes

对于PyCharm,则直接下载两个模块即可

4、下载浏览器驱动

首先的一点就是查看你的浏览器的版本,一定要下载与之对应版本的webdriver驱动文件

  1. Chrome驱动文件下载:点击下载chromedrive

  2. Firefox驱动文件下载:点解下载geckodriver

  3. Edge驱动文件下载:点击下载msedgediver

将下载好的压缩包解压到任意位置,并把当前路径保存到环境变量。(建议将其保存到运行程序的相同级目录下

,这样不需要再添加环境变量了)

到此前期准备工作就完成了


二、登录校园网

1、打开浏览器

接下来我们开始第一步:打开一个网页,这里以baidu.com为例,在python源程序中输入并运行下列代码:

 #引入selenium库中的 webdriver 模块from selenium import webdriver​#打开Edge浏览器driver = webdriver.Edge()#打开百度搜索主页driver.get('https://www.baidu.com')

运行结果如下:

如果弹出百度页面,那么说明前期工作没毛病,恭喜你已经成功一半了

2、在网页中输入信息

以百度搜索主页为例,我们在使用时,需要在搜索框中输入我们需要搜索的信息,那我们怎么捕捉到页面中的搜索框并在其中输入信息呢?这时我们需要使用到selenium库中的元素定位方法,这里我们希望通过 XPath 定位搜索框在网页中的 <input> 标签 ,调用find_element_by_xpath()方法,在参数中输入路径表达式来定位搜索框,代码如下:

 #调用selenium库中的find_element_by_xpath()方法定位搜索框,同时使用send_keys()方法在其中输入信息driver.find_element_by_xpath('//*[@id="kw"]').send_keys('Hello World!')

运行结果如下:

那么大家现在可能会有一个疑问是,应该如何获取搜索框的路径表达式呢?我们按 F12 或右键打开网页的元素审查窗口,点击窗口顶部的元素选择按钮,之后选中搜索框,此时已定位到搜索框在网页中的 <input> 标签,右键选择Copy XPath即可。详细步骤看图:

3、对网页进行点击

在搜索框中输入将要搜索的信息之后,需要点击搜索按钮进行搜索,搜索按钮的路径表达式获取方式与步骤二一致,代码如下:

 #调用selenium库中的find_element_by_xpath()方法定位搜索按钮,同时使用click()方法对按钮进行点击driver.find_element_by_xpath('//*[@id="su"]').click()

运行结果如下:

步骤①至③完整代码如下:

 # 引入selenium库中的 webdriver 模块from selenium import webdriver​# 打开谷歌浏览器driver = webdriver.Edge()# 打开百度搜索主页driver.get('https://www.baidu.com')# 调用selenium库中的find_element_by_xpath()方法定位搜索框,同时使用send_keys()方法在其中输入信息driver.find_element_by_xpath('//*[@id="kw"]').send_keys('Hello World!')# 调用selenium库中的find_element_by_xpath()方法定位搜索按钮,同时使用click()方法对按钮进行点击driver.find_element_by_xpath('//*[@id="su"]').click()

4、打开并登录校园网

如果你对上述三个基础操作有了足够清楚的认识,那么如何实现打开并登录校园网,你的心里一定有了一些想法。每个学校的校园网不同,但是大同小异,下面以我的校园网为例,代码如下:

 # 引入selenium库中的 webdriver 模块from selenium import webdriver# 引入time库import time​stu_id = 'XXXXXXXX'  # 学号passwd = 'XXXXXX'  # 密码ip_add = 'X.X.X.X'  # 校园网IP​# 这里都是我学校校园网的位置,要替换成你自己的stu_id_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[2]'  # 学号的XPathpasswd_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[3]'  # 密码的XPathlogin_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[1]'  # 登录按钮的XPath​'''考虑到网页打开的速度取决于每个人的电脑和网速,使用time库的隐式等待隐式等待会在页面加载完成之后,才开始。在元素的查找过程中,会持续性地获取指定元素对象。如果提前获取到元素,则会继续进行后续的操作。如果没有获取到,则会等待最大的等待时间,也会继续进行后续的操作。设置隐式等待之后,每一行代码的操作都会调用隐式等待。'''​# 打开Edge浏览器driver = webdriver.Edge()# 隐式等待driver.implicitly_wait(10)# 打开校园网driver.get(f'http://{ip_add}/')# 输入账号和密码driver.find_element_by_xpath(stu_id_add).send_keys(stu_id)driver.find_element_by_xpath(passwd_add).send_keys(passwd)# 统一网页最大化,防止位置不对driver.maximize_window()# 点击登录按钮driver.find_element_by_xpath(login_add).click()# 关闭浏览器driver.close()driver.quit()

三、打开网卡

现在开机自启动(不难)和连接校园网(有ip)都可以实现,但是我发现,刚开机的时候,我们的电脑应该是没有IP地址的,等待有个DHCP服务器分配给我一个ip,如果自己写个DHCP报文发送程序主动寻找请求太麻烦了。

功夫不负有心人,终于让我发现一个巧方法!!!

经过多次实验发现,在windows桌面,图形化界面上只要我打开WLAN,然后点击我要连接wife的名字,这时候查看无线局域网适配器 WLAN时(在命令行查看,输入ipconfig),发现有ip了。知道了流程,那么我们可以用编程来实现这些步骤。

#  引入pywifi库及所带常量库
import pywifi
from pywifi import const, Profile#  获取网卡接口
wifi = pywifi.PyWiFi()#  得到第一个无线网卡
ifaces = wifi.interfaces()[0]#  切断网卡连接
ifaces.disconnect()#  获取wifi的连接状态
wifistatus = ifaces.status()#  检查wifi是否处于切断状态
if wifistatus == const.IFACE_DISCONNECTED:#  网卡已被切断pass
#  如果网卡没有被切断
#  或者使用 " if wifistatus == const.IFACE_CONNECTED: "
else:#  已连接wifipass#  如果已经切断网卡,一般执行下述操作
if wifistatus == const.IFACE_DISCONNECTED:#  设置wifi连接文件profile: Profile = pywifi.Profile()#  你要连接的网络的名称profile.ssid = "    "#  网卡的开放状态#  " Auth - AP "的验证算法profile.auth = const.AUTH_ALG_OPEN#  wifi的加密算法#  通常的加密算法值为 " WPA "#  选择wifi的加密方式#  " Akm - AP "的密钥管理profile.akm.append(const.AKM_TYPE_WPA2PSK)#  加密单元#  " Cipher - AP "的密码类型profile.cipher = const.CIPHER_TYPE_CCMP#  设置密码password = "   "#  回调密码(wifi密码)#  如果没有密码,则设置值为 " CIPHER_TYPE_NONE "profile.key = password#  删除已连接的所有wifi文件ifaces.remove_all_network_profiles()#  加载新的wifi连接文件tep_profile = ifaces.add_network_profile(profile)#  连接上面的wifi文件ifaces.connect(tep_profile)#  如果wifi已连接if ifaces.status() == const.IFACE_CONNECTED:print(True)#  如果仍未连接else:print(False)

四、完整程序

# 引入selenium库中的 webdriver 模块
from selenium import webdriver
# 引入time库
import time
#  引入pywifi库及所带常量库
import pywifi
from pywifi import const, Profile# 打开wifi
def open_wlan():#  获取网卡接口wifi = pywifi.PyWiFi()#  得到第一个无线网卡ifaces = wifi.interfaces()[0]#  获取wifi的连接状态wifistatus = ifaces.status()#  如果网络断开,执行下述操作if wifistatus == const.IFACE_DISCONNECTED:#  设置wifi连接文件profile: Profile = pywifi.Profile()#  你要连接的网络的名称profile.ssid = "XXXXX"#  设置密码#  password = "   "#  如果没有密码,则设置值为 " CIPHER_TYPE_NONE "profile.key = "CIPHER_TYPE_NONE"#  加载新的wifi连接文件tep_profile = ifaces.add_network_profile(profile)#  连接上面的wifi文件ifaces.connect(tep_profile)# 连接校园网
def networking():stu_id = 'XXXXXXXX'  # 学号passwd = 'XXXXXX'  # 密码ip_add = 'X.X.X.X'  # 校园网IPstu_id_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[2]'  # 学号的XPathpasswd_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[3]'  # 密码的XPathlogin_add = '//*[@id="edit_body"]/div[3]/div[1]/form/input[1]'  # 登录按钮的XPath# 打开Edge浏览器driver = webdriver.Edge()# 设置隐式等待driver.implicitly_wait(10)# 打开校园网driver.get(f'http://{ip_add}/')# 输入账号和密码driver.find_element_by_xpath(stu_id_add).send_keys(stu_id)driver.find_element_by_xpath(passwd_add).send_keys(passwd)# 统一网页最大化,防止位置不对driver.maximize_window()# 点击登录按钮driver.find_element_by_xpath(login_add).click()# 关闭浏览器driver.close()driver.quit()if __name__ == "__main__":open_wlan()networking()

五、设置开机自启动

自启动方法一:系统自启动

设置python程序开机自启动

1、创建一个xxx.bat文件(将文件扩展名改为bat),右键编辑

2、在xxx.bat文件里面写入以下内容后保存:(可以按照如下流程自己去cmd中测试一下)

@echo off
#关闭回显功能,也就是屏蔽执行过程,建议放置在批处理的首行。
d:
#如果需要开机自启动的python程序在c盘,不需要这一行程序;如果需要自启动的python程序在d盘(或其他盘),需要先切换到d盘(或其他盘)
cd path 
#path为你所要开机自启动的python程序所在的文件夹
python xxx.py 
#xxx.py为path文件夹内需要自启动的python程序

例如:

@echo off 
D:
cd D:\study\Python\project\AutomaticLogin\
python test1.py

3、将xxx.bat文件复制到windows的自启动文件夹内,即可开机自启动python程序windows自启动文件夹:

C:\ProgramData MicrosoftIWindows\Start Menu Programs\StartUp

或者win + r 输入shell:startup直接打开自启动文件夹

!注意!:最好在电脑的命令行界面将所需的模块库装一遍,否则可能会出现在PyCharm可以运行,在命令行运行却报错的情况。

可以在命令行窗口输入pip list,可以在windows上查看python安装了哪些库

自启动方法二:注册服务

1、打包成exe文件

a.概述

服务的优势就在于可以开机自启动

而在windows上,python不能直接将脚本注册为服务,需要将其先打包成exe,再将exe注册为服务打包exe

b.安装 PyInstalle

Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块。

安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装即可。在命令行输入如下命令:

pip install pyinstaller

这边强烈建议使用 pip 在线安装的方式来安装 PyInstaller 模块,不要使用离线包的方式来安装,因为 PyInstaller 模块还依赖其他模块,pip 在安装 PyInstaller 模块时会先安装它的依赖模块。

运行上面命令,应该看到如下输出结果:

Successfully installed pyinstaller-x.x.x

其中的 x.x.x 代表 PyInstaller 的版本。(installed后面可能会跟上一堆依赖,只要里面有pyinstaller就行)

在 PyInstaller 模块安装成功之后,在 Python 的安装目录下的Scripts目录下会增加一个 pyinstaller.exe 程序,接下来就可以使用该工具将 Python 程序生成 exe 程序了。

c.PyInstaller生成可执行程序

安装好pyinstaller包后,在cmd/pycharm的终端里运行如下代码打包(进入脚本所在目录):

pyinstaller -F test1.py --noconsole

-F表示不带依赖exe,大工程可能会启动较慢;改成-D则表示带依赖;小工程直接-F即可 test1.py是我的脚本文件名称,这里换成自己的 -noconsole表示不带黑框

注意:由于该程序没有图形用户界面,因此如果读者试图通过双击来运行该程序,则只能看到程序窗口一闪就消失了,是正常现象。

2、注册服务

1.下载最新版本

下载地址:NSSM - the Non-Sucking Service Manager

2.根据自己的平台,将32/64位nssm.exe文件解压至任意文件夹。

3.来到nssm所在目录,在文件路径处输入cmd,可打开命令窗口

4.在命令窗口内输入

nssm install {服务名称}

即注册服务的名称。 我这里是AutomaticLogin,是我注册后的服务的名称,这里随意,但不可出现中文,最好不要有空格、特殊符号

注册服务弹出如下NSSM界面。

5.Application标签设置:

Application Path: 选择系统安装的exe(cmd也可以)。
Startup directory: 选择exe项目的根目录。
Arguments: 输入启动参数

点击 Application Path右边的省略号按钮,选中前边生成的exe

Startup directory同理,选择exe项目的根目录(不过一般选好了Application Path,Startup directory自动生成)

在details下,输入服务名和对服务的描述,点击Install service

注册成功

打开任务管理器,服务

如果状态这里并不是启动状态,可以右键启动 如果注册之前就开着服务窗口,注册后可能看不到,右键刷新一下即可 启动类型为自动,即可开机自启动

在这里插入图片描述

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

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

相关文章

毫无基础的人如何入门 Python ?--找对学习入口是关键!

1.行百里者半三十 不少学生或职场人士总面临这样一种窘境&#xff1a;数字化转型大背景、大趋势下&#xff0c;感觉非常有必要学习Python等分析工具&#xff0c;但在真正学习Python的各种语言规则时&#xff0c;往往体验不到知识的乐趣&#xff0c;翻看个别章节后即束之高阁。…

VUE2+THREE.JS辉光设定和解决辉光导致背景变暗的问题

THREE.JS辉光设定和解决辉光导致背景变暗的问题 THREE.JS 辉光设定THREE.JS 辉光导致背景变暗的问题1.设定背景图片2.初始化辉光3. animate 一直渲染辉光 THREE.JS 辉光设定 给我的设计好的fbx模型,已经设定好了模型发光材质,所以直接添加辉光效果,就可以自动发光 blender模型生…

前馈全连接层

B站教学视频链接&#xff1a;2.3.4前馈全连接层-part2_哔哩哔哩_bilibili

微信小程序input type=nickname不能触发隐私政策?小程序隐私协议开发指南之nickname权限篇

小程序隐私协议开发指南之nickname权限篇 涉及处理用户个人信息的小程序开发者,需通过弹窗等明显方式提示用户阅读隐私政策等收集使用规则。 为规范开发者的用户个人信息处理行为,保障用户合法权益,微信要求开发者主动同步微信当前用户已阅读并同意小程序的隐私政策等收集使…

AI 编程如何助力开发者高效完成架构设计工作?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《AI 编程技术架构剖析和案例开发实战》 —1— AI 编程能帮我们完成哪些工作&#xff1f; 从目前企业级种种现实场景应用来看&#xff0c;AI 编程已经成为一种帮助开发者解决架构设计复杂问题、提高编程效率以…

使用OpenCompass评测rwkv模型教程

0x0. 前言 继续MLC-LLM 支持RWKV-5推理以及对RWKV-5的一些思考文章里面提到的想法&#xff0c;探索一下使用OpenCompass来评测RWKV模型&#xff0c;对模型的实际表现有一个更客观的了解。我在尝试的过程中也碰到了一些问题&#xff0c;所以这里记录一下使用OpenCompass评测的流…

【doccano】文本标注工具——属性级情感分析标注自己的业务数据

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【doccano】文本标注工具——属性级情感分析标注自己的业务数据 1.说明2.前提条件3.doccano创建项目4.添加数据集5.添加标签6.标注数据7.导出数据转换格式 1.说明 2.前提条件 确保doccano已经安装完成 可以参考文…

广州华锐视点提供AI虚拟主播定制,为品牌注入新活力!

随着科技的飞速发展&#xff0c;人工智能已经逐渐渗透到我们生活的方方面面。在这个信息爆炸的时代&#xff0c;如何让您的品牌在众多竞争对手中脱颖而出&#xff0c;成为行业的佼佼者&#xff1f;答案就是——AI虚拟主播&#xff01; 广州华锐视点提供AI数字人定制服务&#x…

一些后端测试的东西

后端测试都测试些什么 接口测试最小单元测试联调测试 接口测试 接口测试要素 可重复性 异常覆盖 环境一致 如何进行方便的接口测试 测试工具&#xff1a; idea-httpRequest &#xff0c; apifox , postman, jmeter 如何使用idea进行高效的接口测试 编写接口 启动项目直接…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询&#xff1a; 语法&#xff1a; 2、range查询&#xff1a;&#xff08;范围查询&#xff09; 语法&#xff1a; 三、地理查询 1、geo_bou…

发生这种情况 经常导致投资者的痛苦

在这个市场中&#xff0c;什么事会让人痛苦呢&#xff1f;有的投资者马上回答&#xff0c;因为亏损。说实话&#xff0c;如果经过刻意的练习&#xff0c;我们在一定程度上能克服亏损给人带来的痛感。但是有另一种情况也容易为投资者带来痛苦&#xff0c;下面我们就来讨论一下。…

游戏缺少d3dx9_43.dll修复方法分享,快速解决dll缺失问题

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dx9_43.dll文件”。这个错误通常出现在运行某些游戏或应用程序时&#xff0c;d3dx9_43.dll是一个动态链接库文件&#xff0c;它是DirectX 9的一部分&#xff0c;用于支持游戏中的3…

Egg.js的方法扩展

Extend-application 方法扩展 eggjs的方法的扩展和编写 Egg.js可以对内部的五种对象进行扩展&#xff0c;以下是可扩展的对象、说明、this指向和使用方式。 application对象方法拓展 按照Egg的约定&#xff0c;扩展的文件夹和文件的名字必须是固定的。比如要对application扩…

亚马逊云科技re:Invent Peter DeSantis演讲,数据规模拓展无极限引领Serverless构建之路

re:lnvent 2023 Peter DeSantis主题演讲&#xff0c;数据规模拓展无极限引领Serverless构建之路&#xff08;Road to Serverless&#xff09;。 Logical Qubit全新发布&#xff1a;量子计算硬件&#xff0c;6倍的量子纠错效率提升。 Amazon全新发布Redshift Serverless&#xf…

Java多线程其他细节知识

并发、并行 进程 并发的含义 并行的理解 线程的生命周期

Hive:从HDFS回收站恢复被删的表

场景 一张手工维护的内部表&#xff0c;本来排查没有使用&#xff0c;然后删掉了&#xff0c;发现又需要使用&#xff0c;只能恢复这张表了。 1.确认HDFS是否开启回收站功能 2.查看回收站中的数据 被删除的数据会放在删除数据时使用的用户目录下&#xff0c;如&#xff1a;使…

详解前后端交互时PO,DTO,VO模型类的应用场景

前后端交互时的数据传输模型 前后端交互流程 前后端交互的流程: 前端与后端开发人员之间主要依据接口进行开发 前端通过Http协议请求后端服务提供的接口后端服务的控制层Controller接收前端的请求Contorller层调用Service层进行业务处理Service层调用Dao持久层对数据持久化 …

赤霞珠葡萄酒的风味特征是怎样的?

赤霞珠最值得注意的特点之一是它在发酵或桶陈酿期间对橡木的亲和力&#xff0c;除了对葡萄的天然高单宁产生软化效果外&#xff0c;香草和香料的独特木材风味还补充了黑醋栗和烟草的天然葡萄风味。 来自云仓酒庄品牌雷盛红酒分享基于赤霞珠的波尔多混合物在225升&#xff08;59…

二级分类菜单及三级分类菜单的层级结构返回

前言 在开发投诉分类功能模块时&#xff0c;遇到过这样一个业务场景&#xff1a;后端需要按层级结构返回二级分类菜单所需数据&#xff0c;换言之&#xff0c;将具有父子关系的List结果集数据转为树状结构数据来返回 二级分类菜单 前期准备 这里简单复刻下真实场景中 出现的…

Doris 简介(一)

Apache Doris 由百度大数据部研发&#xff08;之前叫百度 Palo&#xff0c;2018 年贡献到 Apache 社区后&#xff0c;更名为 Doris &#xff09;&#xff0c;在百度内部&#xff0c;有超过 200 个产品线在使用&#xff0c;部署机器超过 1000 台&#xff0c;单一业务最大可达到上…