电子科技大学信息门户模拟登录

首先抓包或者按下F12进入浏览器开发者模式进行分析:


2018-1-25(1).jpg

由这张图我们可以得出我们填写完学号和密码后post的表单包含的内容有username,password,lt,execution,eventld,rmShown。而execution,_eventId,rmShown都是常量,分别为

'execution': 'e1s1',
'_eventId': 'submit',
'rmShown': '1'

而lt每次都是不同的一串字符串,查看源代码:

2018-1-25(2).png

这个lt实际上是登录的用户需要的流水号,相当于你起银行办理业务的时候,首先得拿到一个流水号排队表示你进入了办理整个业务的流程。而在这里,只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程。否则,没有流水号的情况下,webflow会认为用户还没有进入webflow流程,从而会重新进入一次webflow流程,从而会重新出现登录界面。
而为了得到lt,我们可以通过BeautifulSoup库进行解析,在标签下找到name='lt',并提取出value后的一串字符串即可。此外,在我们请求页面以获取lt值后,如果再用post发送我们构造好的表单,在这个过程中,相当于刷新了一下页面,,我们先前获得的lt值已经不再是现在的lt值了,所以这个时候我们就要用requests的session方法来保持cookie不变了,session方法可以让同一个实例发出的所有请求保持相同的cookie。
代码如下:

__author__=='YunLambert'
import requests
from http import cookiejar
from bs4 import BeautifulSoup as bs

header = {'User-Agent':...} #填写自己浏览器的请求头部信息即可
loginurl = 'http://idas.uestc.edu.cn/authserver/login?service=http://portal.uestc.edu.cn/index.portal'

def getLt(str):
    lt = bs(str, 'html.parser')
    dict = {}
    for i in lt.form.find_all('input'):
        if(i.get('name')) != None:
            dict[i.get('name')] = i.get('value')
    return dict

print('****UESTC模拟登录*****')
print('请输入学号:')
username = input()
print('请输入密码:')
password = input()

s = requests.Session()
s.cookies = cookiejar.CookieJar()
r = s.get(loginurl)
dict = getLt(r.text)
postdata={
    'username': username,#学号
    'password': password,#密码
    'lt': dict['lt'],
    'execution': 'e1s1',
    '_eventId': 'submit',
    'rmShown': '1'
}
response = s.post(loginurl, data = postdata, headers = header)
print(response)
#如果返回值为200,说明模拟登陆成功;404说明错误,登陆失败;500的话,可能是学校网又炸了....

你可能感兴趣的:(电子科技大学信息门户模拟登录)