其实之前有写过一篇帖子了

在之前使用教务系统的过程中,偶然一次发现登上教务系统后再退出来的后的登录网址竟然不需要验证码,想着之前有写过教务系统的爬虫模拟登录,没验证码的岂不是更好干(之前那次折腾了好久hhh,后面还是用selenium实现的成绩爬取,相比直接爬取,selenium的性能还是比不上毕竟selenium本来就是用来搞自动化的hhh),然后今天闲着就重写了相同的功能并实现了成绩的爬取。

简单写一下思路:百度直接搜索出来的教务系统网址是需要验证码的,登录上去之后,再退出来就得到不需要验证码的登录网址

点开我们可以发现是需要验证码的

登录上去之后再退出,下图箭头所指:

退出之后,是不是神奇的发现验证码不见了(见下图)哈哈哈,这就是我们要的。

正式开始我们的分析看了好一会儿后,发现自己根本看不懂,想着反正是调用的这个文件中的函数,那不如自己去改改代码调用encodeInp()函数,看能不能调用成功,输出跟调试工具中一样的encoded,如果是一样的我们目的就达到了,加密的过程就是在submitForm1()中调用encodeInp()函数,且跟cookie没关系,也就是说每个人的账号密码最后经过加密出来的字符串每次都是固定的。

这里我就用了自己的账号密码,结果可以发现是一样的。

我们直接找到表单位置,可以注意到当点击登陆时会触发函数submitForm1() ==> 好嘞,这不好办吗?接下来就让我们来顺腾摸瓜

我们复制函数的名称,并直接ctrl+F查找到函数的位置

仔细看看函数,不难发现函数取得到了表单中我们输入的账号密码后都调用了encodeInp()函数,然后组成了一个用变量encoded保存的字符串。

3.输入一个错误的账号密码,点击登录看看开发者调试工具里面network的情况

我们可以注意到红框中的那个post请求

点开后,我们可以看到cookie,也不难发现encoded字样,于是我们可以猜测提交的表单中就只有这一个数据,且是登录验证的唯一一个数据(比之前那个贴简单太多了,自己流下了心酸的泪水)

接着分析,关掉浏览器,重新打开这个不要验证码的网址(重新获得服务端分配的一个cookie),输入跟刚刚错误的账号密码再看看那个encoded有没有变化,因为根据自己上次的经验encoded是根据每次分配的cookie不同而变化的.....然后我们发现是没有变化的!!!是没有变化的!!!是没有变化的!!!(重要的事情说三遍,这还不好办嘛???)

上面说到点击网页上的登录按钮时会触发函数submitForm1(),然后在这个函数中又会调用对账号密码进行加工(其实是加密hhh)的encodeInp()函数,我们来找到encodeInp()函数的位置,相同的操作CTRL+F,结果发现函数不在这儿。

既然函数不在该页面的源代码中,肯定是引进来的js文件,我们在html的头部去找引入的文件,结果发现只引入了一个js文件,那么我们可以肯定encodeInp()函数就在该文件中了。

在点开的conwork.js文件中搜素encodeInp()函数,找到了!!!

要分析,肯定是得要看网页源代码滴(鼠标右击查看网页源代码),当然还有F12提供的开发者调试工具

2.让我们来看看网页源代码

继续顺腾摸瓜(战术性滑稽脸)

仔细看看conwork.js文件接下来我们就可以写python代码了我们先把conwork.js文件的代码和经过更改的且python的execjs库能调用的submitForm1()函数放在一个同一个js文件里面(这里我把函数名称换了一下,换成了encode)

写代码的思路我就不说了,代码贴在下面了,不过这次我倒是惊奇的发现不加header都能直接登陆。import requests

import execjs

from bs4 import BeautifulSoup

class Login:

def __init__(self):

self.url = 'http://jiaowu2.hufe.edu.cn/jsxsd/'

header = {

"Content-Type": "text/html;charset=utf-8",

"Vary": "Accept-Encoding"

}

self.session = requests.session()

self.session.get(self.url,headers=header)

self.username = '****'#账号

self.password = '****'#密码

self.GetEncoded()

self.login()

def GetEncoded(self):#该函数获取加密后的字符串

with open(r'conwork.js', encoding='utf-8') as f:

js = execjs.compile(f.read())

self.encoded =  js.call('encode', self.username,self.password)

f.close()

return self.encoded

def login(self):

postData = {

'encoded': self.encoded.strip()  # 账号密码加密后的东西

}

return self.session.post('http://jiaowu2.hufe.edu.cn/jsxsd/xk/LoginToXk',data=postData)

def GetScore(self):#爬取全部课程成绩

response = self.session.get('http://jiaowu2.hufe.edu.cn/jsxsd/kscj/cjcx_list')

grade_html = response.text

soup = BeautifulSoup(grade_html, 'html.parser')

tr_lable = soup.find_all("tr")[1:]

all_rows = []  # 该列表存放每一个课程的详细信息。

all_rows.append([i.text for i in soup.find_all("th")])

for tr in tr_lable:

tds = tr.find_all('td')

row = []

for td in tds:

row.append(td.text)

all_rows.append(row)

return all_rows

test = Login()

test.login()

print(test.GetScore())#打印爬取的成绩

最后,代码肯定有很多写的不够好的地方,望大家多多包含。嘿嘿嘿~

强智科技教务系统学科成绩c语言,湖南强智科技教务系统python模拟登录并爬取成绩(财院)...相关推荐

  1. 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算

    目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...

  2. Python_模拟登录(爬取教务系统信息并制作查询界面)

    采用模块: (1)urllib,urllib2,cookielib,BeautifulSoup (2)wx,py2exe 工作步骤: (1)解析网站原理,主要获取post数据.密码加密方式相关信息所在 ...

  3. python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...

  4. python爬取学校教务管理系统_python requests模拟登陆正方教务管理系统,并爬取成绩...

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...

  5. 基于python的汽车信息爬取与可视化分析系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某汽车门户网站采集汽车数据,并利用 Flask + Echarts 前后端框 ...

  6. python爬虫实例之爬取智联招聘数据

    这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...

  7. Python爬虫练习记录-爬取教务系统成绩

    模拟post提交表单,获取Cookie 使用火狐浏览器打开学校教务系统,F12打开开发者模式 点击网络,持续记录数据包,发现login.action是提交的表单信息 查看表单数据,发现前端对param ...

  8. python模拟登录教务系统_用Python实现模拟登录正方教务系统抢课

    最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作. 而且整个流程是比较简单,这是因为正方 ...

  9. 用Python模拟登录学校教务系统抢课

    --  Illustrations by Vladislav Solovjov -- ♚ 作者:小苏打 博客地址:https://vhyz.me GitHub地址:github.com/vhyz/ZF ...

最新文章

  1. 后悔没早知道这些Python特性
  2. cmd mysql uroot p不是内部或外部命令...
  3. Hadoop的SequenceFile读写实例
  4. Node 之 模块加载原理与加载方式
  5. hadoop中setup,cleanup,run和context讲解
  6. LabVIEW: 无法执行该VI。
  7. extjs 方法执行顺序_(软件工程)非结构化程序变为结构化程序的三种方法
  8. ernie和Bert的参数理解
  9. 来吧,用设计模式来干掉 if-else 啊~
  10. 基于adaboost算法的人脸检测_基于噪声检测的图像去噪算法
  11. 1.2 安装 docker 容器并配置镜像加速器
  12. java本地缓存技术或框架
  13. fgo升级经验计算机,命运冠位指定FGO升级所需经验值介绍
  14. Arduino和LabVIEW射频校园火警系统
  15. 计算机相关经典书籍推荐
  16. C++学习笔记5——引用
  17. php搜索引擎开源源码,PHP搜索引擎源代码
  18. 隐藏窗口和任务栏图标的实现
  19. 学习记录297@python全字符匹配
  20. 诗歌(6)—饮湖上初晴后雨

热门文章

  1. xlrd读取多个sheets
  2. 阿里云实人认证有什么特点
  3. 支持移动触摸设备的简洁js幻灯片插件
  4. 林业调查规划设计资质申办流程及要求?
  5. CAD随机多面体3D 多面体骨料 凸多面体颗粒
  6. python爬取QQ音乐免费歌曲 2020.7.26
  7. R shiny echart4r 常见问题整理
  8. LeetCode 6036. 构造字符串的总得分和
  9. win7不能在本地计算机启动防火墙,Win7防火墙启动不了的原因及解决办法
  10. 磁力链接怎么是html,磁力链接的使用方法有哪些