大连海事的校园网每次开机登录都需要手动输入密码,虽然浏览器有密码记忆功能,但还是免不了手动点击一下,本着自动化的原则,特分析其认证过程,通过Python代码实现一键登录。

当然,已有同学对登录过程进行了研究,不过其实现方式是通过selenium的方式,需要调用浏览器实现自动登录,而本方法是通过提交post请求实现认证,速度有更多提升且对运行环境降低了要求。

模拟登录的难点是认证需要经过多次重定向,且访问重定向网址带的cookie有所不同。在login步骤中,通过post提交的数据中密码加密方式是des加密,密钥在认证页面的源码能够找到,为base64格式,加密后的密码也为base64格式。

实现代码如下:

# -*- coding:utf-8 -*-import requests
import re
from pyDes import des, PAD_PKCS5, ECB
import binascii
import timedef des_encrypt(s, key):"""DES 加密:param key: 秘钥:param s: 原始字符串:return: 加密后字符串,16进制"""secret_key = keyk = des(secret_key, mode=ECB, pad=None, padmode=PAD_PKCS5)en = k.encrypt(s, padmode=PAD_PKCS5)return en  # 得到加密后的16位进制密码 <class 'bytes'>def encrypt(pd='12345', key='aM51f8FuE/s='):"""密码加密过程:1 从认证页面中可获得base64格式的秘钥2 将秘钥解码成bytes格式3 输入明文密码4 通过des加密明文密码5 返回base64编码格式的加密后密码:param pd: 明文密码:param key: 秘钥:return: 加密后的密码(base64格式)"""key = binascii.a2b_base64(key.encode('utf-8'))  # 先解码 <class 'bytes'>pd_bytes = des_encrypt(pd, key)  # 得到加密后的16位进制密码 <class 'bytes'>pd_base64 = binascii.b2a_base64(pd_bytes, newline=False).decode('utf-8')return pd_base64def login(username, password):start_time = time.process_time()session = requests.session()headers = {'Connection': 'keep-alive','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,''application/signed-exchange;v=b3;q=0.9','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/95.0.4638.69 Safari/537.36','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Content-Type': 'application/x-www-form-urlencoded'}session.headers = headers# 访问任意网址,返回包含认证页面链接的内容(自动跳转)url = 'http://bilibili.com/'resp = session.get(url, verify=False)# 提取认证链接并访问,经历一次重定向得到认证页面,且会返回一个session值url = re.search(r"href='(.*?)'</script>", resp.text).group(1)resp = session.get(url)# '''从认证页面正则得到 croypto(密钥 base64格式) 与 execution(post参数)的值 '''croypto = re.search(r'"login-croypto">(.*?)<', resp.text, re.S).group(1)execution = re.search(r'"login-page-flowkey">(.*?)<', resp.text, re.S).group(1)# 构建post数据 填入自己的学号 密码data = {'username': username,  # 学号'type': 'UsernamePassword','_eventId': 'submit','geolocation': '','execution': execution,'captcha_code': '','croypto': croypto,  # 密钥 base64格式'password': encrypt(password, croypto)  # 密码 经过des加密 base64格式}# 添加cookie值session.cookies.update({'isPortal': 'false'})# 提交数据,进行登录,这里禁止重定向,因为会有cookie限制url = 'https://id.dlmu.edu.cn/login'resp = session.post(url, data=data, allow_redirects=False)# 得到上一步返回的重定向网址,继续访问(需要清空cookie值)# 这里实际经过了三次重定向url = resp.headers['Location']session.cookies.clear()resp = session.get(url)end_time = time.process_time()print(end_time - start_time)if resp.status_code == 200:print('成功登录')if __name__ == '__main__':username = ''password = ''login(username, password)

只写了实现登录的过程,不过已经能够较快的实现登录了,另外大连海事的服务大厅认证过程和这个有很多相似,不过服务大厅的重定向更多,最终获得的cookie也更加的复杂。

Python 实现大连海事校园网登录相关推荐

  1. Python模拟校园网登录

    最近忙着实验室的项目,学习的时间相对较少.前一段时间刚开始接触python时,依葫芦画瓢照着写了一个爬虫,爬取了某个网站的图片.当看到一张张图片自动出现在电脑屏幕上时,有些小小成就感.我想大多数人开始 ...

  2. 基于python+splinter工具模拟校园网自动登录+密码破解

    工具: python + splinter 技术目标: 1.利用python的splinter package,在登录界面中自动完成页面操作,提取elements,      post element ...

  3. 自己动手写H3C校园网登录客户端(Linux平台版)

    自己动手写H3C校园网登录客户端(Linux平台版) By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 周一晚上的时候,和实验室的ZL同学提 ...

  4. Python脚本-自动连接校园网

    自动连接校园网 使用语言:Python python爬虫 浏览器:谷歌浏览器 import requests#登录地址 URL="http://10.2.255.26:801/eportal ...

  5. 大连海事学院计算机研究生多少分,大连海事大学计算机或软件工程研究生多少分能录取...

    匿名用户 1级 2014-09-15 回答 大连海事大学2009年学术型统考硕士研究生分专业招生计划表 序号 专业代码 专业名称 统考招生人数 统考招收公费生人数 1 082302 交通信息工程及控制 ...

  6. 大连海事大学计算机调剂,大连海事大学2017年考研调剂信息

    2017考研复试调剂群 460216643 大连海事大学2017年考研调剂信息已经公布,为了方便考生,中公考研小编为大家整理了大连海事大学2017年考研调剂信息,以供考生参考,希望考生及时准备. 大连 ...

  7. python课设总结_Python技术分享课总结:用Python模拟知乎自动登录

    原标题:Python技术分享课总结:用Python模拟知乎自动登录 Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门&quo ...

  8. python必备基础代码-Python基础练习之用户登录实现代码分享

    python版本为python3.5 1.要求 1)输入用户名密码 2)认证成功后显示欢迎信息 3)输错三次后锁定 2.需求分析 1)用户信息存储在文件中(login/config/user_logi ...

  9. 编写python代码实现打开并登录网页、对网页进行点击、输入信息等操作

      当我们打开一个网页进行信息搜索时,少不了要对它进行点击和输入信息等操作,有的网页还可能需要你先登录才能开始其他操作.这篇博客就带大家来了解一下如何编写一段python代码实现打开并登录网页.对网页 ...

最新文章

  1. 很好的FireFox addin
  2. 机器学习入门-决策树算法
  3. python获取列表中指定元素的下标
  4. HDU - 5521 Meeting(最短路+思维建边)
  5. 科普漫画 | 沙子如何变成芯片?
  6. BZOJ 1070 拆点 费用流
  7. 如何查看IIS的80端口被占用?
  8. Report_客制化报表输出Excel后去0问题(案例)
  9. kafka日志清理策略
  10. 操作系统课设 Nachos 实验二:Nachos 的 Makefiles
  11. 解析几何 | 吕子根 设三平行平面 $\pi_i:\ Ax+By+Cz+D_i=0\,(i=1,2,3),L,M,N$ 依次是平面 $\pi_1,\pi_2,\pi_3$ 上的任意点,求 $\tria
  12. Dynamics AX2012 从第一个字符串开始截取内容
  13. Linux系统下载Unity-Tweek-Tool
  14. DM420步进电机驱动器
  15. python爬取起点中文网_Python3爬取起点中文网阅读量信息,解决文字反爬~~~附源代码...
  16. java抢红包线段分割法_抢红包算法——线段分割法
  17. C++ 并发编程(从C++11到C++17)
  18. 网易前端微专业课程讨论区问答精选
  19. AlibabaProtect 卸载 windows系统
  20. 注册一个私人网站至少要多少钱(注册步骤)

热门文章

  1. 《人人都是项目经理V2.0》读书笔记——第1章 立项与启动
  2. springboot拦截器和过滤器的区别与使用
  3. Python 函数传参详解
  4. js字符串转与json对象类型转换
  5. Python日期时间处理库dateutil
  6. 如何实现DCS系统与其他网口设备的以太网通讯?
  7. js毫秒转换为年月日时分
  8. 用Java写有关早上的语录,有关于早上太阳的优美精辟句子
  9. 生活随笔:迷上了《逃避虽可耻但有用 》电视剧
  10. 用C语言求1-1000之间的素数/质数