一、介绍
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!“是“判断登录失败的特有标签”的结果
第三个“欢迎熊廷顺同学!“是“判断登录成功的特有标签”的结果