吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2109|回复: 24
收起左侧

[Python 原创] 【python】requests库 让世界再无难看的课(下)

  [复制链接]
wuye4 发表于 2024-3-17 14:25

前情回顾
【python】requests库 让世界再无难看的课(上)
https://www.52pojie.cn/thread-1900832-1-1.html
(出处: 吾爱破解论坛)


接下来我们分析网课的考试部分:
找到考试地址
​ 进入课程页面找到试卷的url链接,提取网址中的参数(id,sid,courseClassId,chapterId,pid)

pF2hPg0.png

找到查看答案页面
点击考试链接发现查看答案链接(由于本人已经测试完成,显示的是查看答案的链接,初始页面是开始考试的链接,经过考试链接与答案的链接进行比对,发现只需在考试链接后面添加参数View=1就可以提前查看答案)到这里其实已经可以根据答案直接通过考试,但是和我们使用代码完成还是有区别的,如需继续深入请往下看。(参数userid,username需要提取)

pF2hC3q.png

提取答案以及所需参数
查看答案后将响应的文本使用正则表达式提取答案以及参数(后续需要构造表单数据)

pF2h9Cn.png

代码如下

#获取正确答案
answer = re.findall(rf'正确答案为:(.* ?)\n', response.text)
#获取每个问题的id值
answerid = re.findall(rf'id="result(.*?)"', response.text)
#获取每个选项的id以及选项的id值
answervalue = re.findall(rf'(A|B|C|D|E|F|).<input name="questionInfoID_(.*?)" value="(.*?)"', response.text)
#获取提交考试答案的url
endexamurl = re.findall(rf'<form name="form1" action="checkpaper.aspx(.*?)"', response.text)
#部分测验有简答题后续需要根据是否有简答题进行判断
jiandati = re.findall(r"简答题", response.text)

数据如下

#数据太多部分省略,详细数据请看到最后自行获取
answer=['A\r', 'A\r', 'A\r', 'A\r', 'C\r', 'C\r', 'A\r', 'D\r', 'C\r', 'D\r', 'E\r', 'A\r', 'A\r', 'A,C,D\r', 'A,B\r', 'A,C\r', 'B,D\r', 'C,D\r', 'B,D\r', 'A,B,C,D,E\r', 'A,B,C,D\r', 'C,E\r', '正确\r', '正确\r', '正确\r']
answerid=['02d4b327-3002-4282-aa5b-f015c51a6b60', '124d536e-4610-4751-a431-522f181aa277', '3ba4bc47-338d-4abc-a7eb-96dd176b3972', '3ffa1902-f87b-43e4-b771-500abc7416d0', '5333d142-0a63-4215-a8ac-3338265d175e', '75da608f-0334-4e19-82b0-37d3190e64bd', '92a92b8d-1eb4-4bd8-bc6d-06c73047c8b2', '94d306f5-8069-4941-825b-08aa6efc7069', 'bb8b4c25-991c-418d-92fd-1ce63e8f6fe5', 'c79e8d2e-cf1c-40c2-946a-5b67312eae29', 'd90d63e9-c342-465f-94b7-7d8a44587f77', 'fab4d8d1-29a0-4829-a50c-113e8230c44d', '5daf09cb-d6e7-473a-9bba-e328dd6a870f', '79696994-d556-4117-bb91-e0ebffea498c', '7ed25abe-cef2-45d8-994e-b2d1c9ef5fe8']
answervalue=[('A', '02d4b327-3002-4282-aa5b-f015c51a6b60', '14b77147-540e-4159-9c0c-1f053b34efe0'), ('B', '02d4b327-3002-4282-aa5b-f015c51a6b60', '3de2671c-b31c-4ae5-85a4-f9141123b3ae'), ('C', '02d4b327-3002-4282-aa5b-f015c51a6b60', 'b99ac033-e1b0-41af-bbee-59bb2e9fa239'), ('E', '92a92b8d-1eb4-4bd8-bc6d-06c73047c8b2', 'ffd7d84f-2d03-4492-ab08-31435812156f'), ('A', '94d306f5-8069-4941-825b-08aa6efc7069', '1af4af8a-86b2-4bf0-afc6-f72dcce220c1'),  ('', '7ed25abe-cef2-45d8-994e-b2d1c9ef5fe8', '690dde09-699a-4640-a206-01e83c1c7b15'), ('', '7ed25abe-cef2-45d8-994e-b2d1c9ef5fe8', '5af72370-7d47-4b8e-800c-7d822c5cd7c0')]

提交考试答案
根据以下表单数据以及上述提取的答案进行构建

pF2hS4s.png

构建表单

newdata = {}
newdata["LastTime"] = 3
for i in matched_data:
    # print(i)
    if ',' in i[0][0]:  # 处理多选题
        selected_answers = i[0][0].split(',')  # 将多选答案分割成列表
        shuzhu = []
        for k in selected_answers:
            for j in i[1]:
                if k == j[0]:
                    shuzhu.append(j[1])
        newdata["questionInfoID_" + i[0][1]] = shuzhu
        newdata["unsure_pad_" + i[0][1]] = 0
    else:
        if i[0][0] == 'A':
            newdata["questionInfoID_" + i[0][1]] = i[1][0][1]
            newdata["unsure_pad_" + i[0][1]] = 0
        if i[0][0] == 'B':
            newdata["questionInfoID_" + i[0][1]] = i[1][1][1]
            newdata["unsure_pad_" + i[0][1]] = 0
        if i[0][0] == 'C':
            newdata["questionInfoID_" + i[0][1]] = i[1][2][1]
            newdata["unsure_pad_" + i[0][1]] = 0
        if i[0][0] == 'D':
            newdata["questionInfoID_" + i[0][1]] = i[1][3][1]
            newdata["unsure_pad_" + i[0][1]] = 0
        if i[0][0] == 'E':
            newdata["questionInfoID_" + i[0][1]] = i[1][4][1]
            newdata["unsure_pad_" + i[0][1]] = 0

    if '正确' == i[0][0]:
        newdata["questionInfoID_" + i[0][1]] = i[1][0][1]
        newdata["unsure_pad_" + i[0][1]] = 0
    if '错误' == i[0][0]:
        newdata["questionInfoID_" + i[0][1]] = i[1][1][1]
        newdata["unsure_pad_" + i[0][1]] = 0

代码如下

#将表单数据newdata以及上述endexamurl传入
def endexam(endexamurl, newdata):
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Origin': 'http://wrggkk.whvcse.edu.cn',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
    }

    data = newdata

    response = requests.post(
        endexamurl,
        headers=headers,
        data=data,
        verify=False,
    )
    print(response.url + "刷测验成功")

结果:成功


结语

​ 到目前为止该学习网站就已经完结了,难度不大,非常适合新手学习。
​ 文中获取的数据需要进行答案与结果的匹配再进行判断才可以成功,这里留给大家们自行思考。
​ 我本来打算直接将正确答案与选项一起获取,未果,于是选择了分开提取,再合并。
​ 有想试试的小伙伴我这里给出查看答案的页面数据,如果有更好的方法可以在讨论区讨论。
​ 如果有其它学习网站可以在讨论区打出,一起探讨。
https://wwm.lanzn.com/iyLjJ1rp57ef
​ 密码:f2p7

免费评分

参与人数 3吾爱币 +6 热心值 +2 收起 理由
snake123zz + 1 我很赞同!
爱飞的猫 + 4 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
日月与你 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lovnie 发表于 2024-3-17 16:53
分析的很详细,学习了
TenSir152 发表于 2024-3-17 21:08
52soft 发表于 2024-3-17 18:51
THYLYYDS 发表于 2024-3-20 08:15
学习了,抽时间上上手
FCGkitty 发表于 2024-3-17 17:46
https://ids3.jsou.cn/login?大佬可以分析下江开的作业么
dork 发表于 2024-3-17 19:23
,学习了
 楼主| wuye4 发表于 2024-3-17 22:58
FCGkitty 发表于 2024-3-17 17:46
https://ids3.jsou.cn/login?大佬可以分析下江开的作业么

如果可以的话能否提供测试账号,不一定保证能够分析出来。
foolbird 发表于 2024-3-18 08:17
这个技术必须学
zgwbbt 发表于 2024-3-18 08:37
感谢大佬技术分享
dilla 发表于 2024-3-18 09:42
感谢详细分析,学习中。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 20:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表