使用post方式模拟登录作业管理系统

一、介绍

1.登录的路由

https://homewk.cn/login
主要是模拟登录

2.需要post的参数

  • username(你的学号)
  • password(你的学号对应的系统密码【采用了md5加密,后面会给加密函数】)
  • identity_id(身份:固定为Student)
    在这里插入图片描述

3.输入

用户的账号和密码

4.输出

  • 怎么判断是否登录成功:可以查看特定内容是否加载出来,比如登录成功后会有你的姓名信息,登录失败则没有;或者通过特定的标签(或者特殊的属性),比如登录失败有id为msg的错误提示,登录成功则没有。需要判断是否登录成功,登录失败获取页面中返回的失败原因。
    在这里插入图片描述

  • 登录成功后页面的课程信息内容
    在这里插入图片描述

5.MD5加密

加密参考代码,需要传入密码参数,类型为字符串(密码即使是数字也得以字符串传入)

import hashlib

def md5value(password):
    password = password.encode()
    md5 = hashlib.md5()
    md5.update(password)
    return md5.hexdigest()

for example
password = '123456789'  # 密码得是字符串
print(md5value(password))
输出:25f9e794323b453885f5181f1b624d0b,这个就是加密后的密码

二、参考代码

# -*- coding: utf-8 -*-
# author:Gary
import requests
import hashlib
from bs4 import BeautifulSoup  # 解析网页内容


# MD5加密
def md5value(password):
    password = password.encode()
    md5 = hashlib.md5()
    md5.update(password)
    return md5.hexdigest()


# 获取post的数据
def post_data(username, password):
    url = 'https://homewk.cn/login'  # 登录的url
    data = {
        'username': username,
        'password': md5value(str(password)),
        'identity_id': 'Student'
    }  # 需要post的数据
    res = requests.post(url, data)
    if res.status_code == 200:  # 状态码200表示请求成功
        return res.text  # 返回网页的内容
    else:
        print('ISE')
        exit()

# 通过判断登录失败的特有标签,判断是否登陆成功
def login(html):
    # print(html)
    soup = BeautifulSoup(html, 'html.parser')  # 注意需要添加html.parser解析
    error_div = soup.find('div', id='msg')  # 定位到div
    if error_div:  # 如果这个标签存在就表示登录失败
        print(error_div.find_next('h1').text)  # 输入错误提示
    else:
        print('login successfully!')

    # 或者判断登录成功的特有标签,可以登录成功的欢迎语
    # name_span = soup.find_all('span', class_='l-btn-text')  # 如果你观察过通过html的检查观察,会发现欢迎语是在这个span
    # 但是你获取不到内容,因为这个是经过js控制变化了,我们代码没有执行js,所以获取到的网页内容就不一样
    # 这个时候你就要输出网页内容观察,然后你就会发现,他其实在下面的div中,而且唯一
    name_div = soup.find('div', class_='easyui-menubutton')
    if name_div:  # 存在表示登录成功
        print(name_div.text)
    else:
        print('login failure!')


if __name__ == '__main__':
    username = 2018301040111  # 学号不存在会报错ise
    password = '123456'  # 密码得是字符串
    html = post_data(username, password)
     # print(html)
    # 判断是否登录成功,判断特点的不同元素是否出现,比如我们获取你的姓名是否出现在返回的页面内容中,获取到了证明登录成功了,没获取到证明失败了,
    # 也可以通过判断特定的html标签是否出现
    # 方法一,特定内容是否出现,比如登录成功后会有姓名
    if '熊廷顺' in html:
        print('login successfully!')
    else:
        print('login failure!')

    # 方法二,特定html标签是否出现
    login(html)

三、运行结果

1.登陆成功

在这里插入图片描述
第一个“login successfully!“是“判断特定内容是否出现”的结果
第二个“login successfully!“是“判断登录失败的特有标签”的结果
第三个“欢迎熊廷顺同学!“是“判断登录成功的特有标签”的结果

2.登陆失败(用户名或密码错误)

在这里插入图片描述

3.登陆失败(post请求失败)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值