一键评教python_模拟登入学校官网并一键评教

鉴于先前回答了一个问题 https://www.zhihu.com/question/50623009/answer/122128894?from=profile_answer_card# 导致有一些知友私信我,问我是怎么实现一键评教功能的。所以就打算写篇文章描述我当时是怎么实现这个功能的,声明我只是个python基础学习者,以下仅为个人的一些观点,不足之处还请各位多多担待。

开门见山吧,首先进入官网的登入界面, 并监控浏览器的行为(网络抓包)

点击登入按钮,会抓取到一个POST头信息,里面含有提交给服务器的信息

比如我这里提交了用户名,密码和一个动态变化的参数lt。lt需要动态的抓取,因此需要分析下登入界面的html,ctrl+f搜索lt很快就找到了它的位置所在。到这里我们就知道POST了哪些信息给服务器,下面只需要写代码向上图中的url post请求即可模拟登入官网。

代码参考:

import re

import requests

import urllib.request

from bs4 import BeautifulSoup as bs

def warn(*args, **kw): pass

import warnings

warnings.warn = warn

print('请输入用户名:')

username = input()

print('请输入密码:')

password = input()

login_url = 'https://cas.ecit.cn/index.jsp?service=http://portal.ecit.cn/Authentication'

def get_LT(login_url):

html = requests.get(login_url, verify=False).text

regex = re.compile('')

lt = re.findall(regex, html)[0]

return lt

LT = get_LT(login_url)

data = {

'lt': LT,

'password': password,

'username': username

}

s = requests.Session()

s.post(login_url, data=data, headers=headers, verify=False)

开头重定义了warning.warn函数是因为运行过程中会出现警告,那是由于我们官网的证书问题,所以在这里requests.Session的verify也需要赋值False,要不然就会报错了。

登入成功后我们继续监控浏览器的行为,找到评教的界面(如果在代码中只需要访问评教的url即可)

点击教学评估按钮,在监控框找到上图右侧表单的html

这个html界面蕴含着六个重要参数,在后面的post请求中需要用到。然后点击右侧评教的按钮,这里会监控到一个post请求

这里的bpr,bprm,pgnr,pgnrm,wjbm,wjmc参数就保存在上面的html中的img标签下面

相信大家都能发现参数与他们之间的对应关系了吧。

提取参数的代码参考:

cs_url = 'http://jw.ecit.cn/jxpgXsAction.do?oper=listWj' #html对应的url

cs_html = s.get(cs_url, headers=headers1, verify=False).text

hiden_regex = re.compile('

cs_list = re.findall(hiden_regex, cs_html)

bpr_list = [i.split('#@')[1] for i in cs_list]

kx_list = [i.split('#@')[5] for i in cs_list]

pgnrm_list = [i.split('#@')[4] for i in cs_list]

bprm_list = [i.split('#@')[2] for i in cs_list]

wjmc_list = [i.split('#@')[3] for i in cs_list]

随后构造上面的post请求即可打开,评教的相关项目界面

这里是由于我已经评教了所以字体都高亮了。

最后一步就是提交选项及其相关参数的表单信息,继续监督浏览器自己做实验的时候需要评教一门课程,这样可以分析post的信息,由于我已经评教了不能再评教了,因此不能截取浏览器的post了,所以我贴一下我最开始的监测到的post信息。

解释一下:0000000017-0000000030是对应的题目,5_1,...,4_1是对应的第一个选项,我这里全是选择第一个选项,即是全部都评满意,这里大家可以即兴发挥。到这里全部的原理就分析结束了。

运行代码结果截图:

以上仅作技术上的交流,请勿用于违反校规校纪的场合。

以上仅作技术上的交流,请勿用于违反校规校纪的场合。

以上仅作技术上的交流,请勿用于违反校规校纪的场合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值