利用Python优雅的登录校园网


Posted in Python onOctober 21, 2020

前言

今天这篇文章的思路来源于校园网,很多的校园网在每次连接时都需要进入一个网址进行登录,这个步骤真的是非常非常的麻烦(大学生都懂~)。所以这次来教大家如何实现一键登录校园网。

一键登录校园网

首先我们来看下整个的流程。首先需要进行网络连接,连接之后会跳转到一个网址,也就是校园网登录的网址。

利用Python优雅的登录校园网

然后输入账号密码登录。

我们需要做到的效果就是点击一个可执行文件然后实现校园网的自动登录。(这里的可执行文件在mac中为excu文件、win中为exe)

我们首先解决如何通过Python进行登录,然后再解决打包的问题。

其实对于Python的登录,会爬虫的朋友应该很快就知道直接通过requests进行表单提交即可。

首先,我们抓包获取校园网登录提交表单的地址:

利用Python优雅的登录校园网

同时,我们也拿到需要提交的表单格式,有些学校的校园网可能需要通过验证码验证,一般不会有很复杂的验证方式,如果需要验证,那么需要去破解一下验证码,https://github.com/hellokuls/cnnyzm。这里给出我之前写的验证码破解案例。

利用Python优雅的登录校园网

拿到了之后就好办了,直接post模拟提交就行了,这里我给出我所写的代码,基本的逻辑都是差不多,大家只需要改成自己学校的相关信息就可以了。

# encoding: utf-8
import requests

# 检查是否连接入校园网
def checkinternet():
  url = 'xxxxxxxxxxxxxxxxxxxxxx' #校园网登录的地址,用来测试是否连接校园网 
  try:
    code = requests.get(url, timeout=5).status_code
    if code != 200:
      print('没有网络哦~')
      return 0
    elif code == 200:
      return 1
    else:
      return 2
  except:
    return 2


def login(username, password):
  url = 'xxxxxxxxxxxxxxxxxx' # 校园网表单提交url
  postdata={
    'action': 'login',
    'ac_id': 1,
    'user_ip':'',
    'nas_ip':'',
    'user_mac':'',
    'username': username,
    'password': password,
    'save_me': '0',
    'ajax': 1
  }
  res = requests.post(url, data=postdata)
  res.encoding = res.apparent_encoding
  res = res.text
  if 'login ok' in res: # 如果存在该字段
    res = "登录成功!"
    return res
  if '5分钟' in res: # 多次错误提交可能会导致账户锁定5分钟
    print("登录失败:")
    return res
  if 'E2620' in res:  # 此处是账号已经在别的设备登录的情况,先注销然后再次登录
    logout(url, username, password)
    return login(username, password)
  return res

# 退出当前账号的登录
def logout(url, username, password):
  logout_data = {
    'action': 'logout',
    'username': username,
    'password': password,
    'ajax': 1
  }
  res1 = requests.post(url, data=logout_data)
  res1.encoding = res1.apparent_encoding
  res1 = res1.text
  print("账户已退出!")


if __name__ == '__main__':
  status = checkinternet()
  if status == 0:
    txt = login(xxxxx, xxxxxxxx) # 输入账号密码
    print(txt)
  elif status == 1:
    print("有网络!")
    txt = login(xxxxxxx, xxxxxxx)
    print(txt)
  else:
    print("未知结果!")

讲解完了代码部分,我们该如何将它打包成一个可执行文件直接通过点击就可以进行联网呢?

这里推荐一个库---pyinstaller

pip install pyinstaller

这个库能够将py文件直接打包成可执行文件,支持win/mac/linux平台。

当我们写完文件后执行下面命令:

pyinstaller -F 文件名.py

执行完后,我们可以看到生成了几个文件夹,而可执行文件就在dist文件夹中。

利用Python优雅的登录校园网

放在桌面上,每次连接直接点击一下就可以连接校园网了~

利用Python优雅的登录校园网

以上就是利用Python优雅的登录校园网的详细内容,更多关于python 登录校园网的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python编程中装饰器的使用示例解析
Jun 20 Python
Python实现全角半角字符互转的方法
Nov 28 Python
python实现发送邮件功能代码
Dec 14 Python
图解Python变量与赋值
Apr 03 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
如何基于python操作json文件获取内容
Dec 24 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
Python参数传递及收集机制原理解析
Jun 05 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
python 使用三引号时容易犯的小错误
Oct 21 #Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 #Python
基于python爬取链家二手房信息代码示例
Oct 21 #Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 #Python
Python为何不支持switch语句原理详解
Oct 21 #Python
基于Python爬取素材网站音频文件
Oct 21 #Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 #Python
You might like
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
python matplotlib库的基本使用
2020/09/23 Python
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
无财产无子女离婚协议书范文
2014/09/14 职场文书
婚庆司仪开场白
2015/05/29 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
python中如何对多变量连续赋值
2021/06/03 Python
灵能百分百第三季什么时候来?
2022/03/15 日漫
Redis 限流器
2022/05/15 Redis