社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何用Python优雅的登录校园网?

Python之禅 • 4 年前 • 857 次点击  


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

一键登录校园网

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

然后输入账号密码登录。

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

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

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

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

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

拿到了之后就好办了,直接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进阶》电子版
回复关键词「Flask」,立即获取Flask 教程
回复关键词「wx」,加入高质量python交流群


推荐:
  1. 我的编程能力从什么时候开始突飞猛进

  2. 每个程序员都必须知道的8种数据结构

  3. 张一鸣:给技术人的建议


长按关注公众号
每天分享python技术干货

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/73913
 
857 次点击  
文章 [ 1 ]  |  最新文章 4 年前