吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3599|回复: 8
收起左侧

[Python 转载] 某学堂挂学时遇到的问题并解决

[复制链接]
xhtdtk 发表于 2022-3-10 23:22
某学堂的课件只能一分钟一分钟的挂学时,大概2分钟向服务器发送一起请求,工具是requests,现在分享遇到的问题并解决办法,但是不分享思路,不分享代码

1、第一次遇到'Content-Type': 'multipart/form-data; boundary=xxxxxxxxxxxxxxxxxxxxxxxxx'的数据类型
这是在视频开始后,每2分钟请求一次视频遇到的,这个请求也是增加学时用的,是必须要先完成的事情。
遇到这种数据类型,上传的表单数据是files
[Python] 纯文本查看 复制代码
rep_continue=requests.post(url_continue,headers=header_continue,files=params)

设置的表单数据必须是这种结构
[Python] 纯文本查看 复制代码
from collections import OrderedDict
params=OrderedDict([("recordId", (None, str(recordId))),
				("position", (None, str(120*num_position))),
				('timeOutConfirm', (None, 'false'))])

请求头必须把“Content-Type”这一键值删掉或注释掉
[Python] 纯文本查看 复制代码
header_continue={
	'Host': 'degree.qingshuxuetang.com',
	'Connection': 'keep-alive',
	'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
	'Accept': 'application/json',
	#'Content-Type': 'multipart/form-data',#必须注释掉
	'X-Requested-With': 'XMLHttpRequest',
	'sec-ch-ua-mobile': '?0',
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',
	'sec-ch-ua-platform': "Windows",
	'Origin': 'https://degree.qingshuxuetang.com',
	'Sec-Fetch-Site': 'same-origin',
	'Sec-Fetch-Mode': 'cors',
	'Sec-Fetch-Dest': 'empty',
	'Accept-Encoding': 'gzip, deflate, br',
	'Accept-Language': 'zh-CN,zh;q=0.9',
	'Cookie': cookie,
	'Referer': eachCourse['courseUrl']+'&cw_nodeId=kcjs_1_1&category=kcjs'
}


2、分数不是刷到一定课时后及时给的,所以判断刷没刷完的话,只能把规定刷到的分数换算成时间
第一步:获取该课程通过分数,并换算成学时
第二步:获取目前刷了多少学时
第三步:进行比较,刷够了就跳下一门
小问题很快解决了

3、登录验证码
51118119791004101Xcode.png
该学堂的验证码是以加/减法进行验证的,一开始想需要人工进行验证,最后想到的是,只要识别到加/减法的前后两个数,那也有50%的概率能蒙对
所以先用ddddocr进行识别,大多数识别是5个数字或4个数字,最后的“=?”识别出来必然是2,如上图识别出来后47342
那就简单了
[Python] 纯文本查看 复制代码
try:
	if len(code)==5:
		number_one=int(code[0]+code[1])
		number_two=int(code[2]+code[3])
		combine_code=number_one+number_two
	elif len(code)==4:
		number_one=int(code[0]+code[1])
		number_two=int(code[2])
		combine_code=number_one+number_two
	else:
		print(str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))+' '+str(username)+' '+eachCourse['courseName']+' 识别不了验证码,等待3秒重新获取')
		time.sleep(3)
		continue
except:
	continue

我蒙的是加法

在识别验证码之前还有一个小问题,就是验证码图片的下载,因为图片在浏览器可以正常打开,地址开头是“data:image/png”,所以需要将图片地址进行base64解码成二进制才能进行下载
[Asm] 纯文本查看 复制代码
import base64
url_codejpg=base64.urlsafe_b64decode(url_codejpg)


4、多进程multiprocessing(抛弃多线程threading)
之前用多线程,部分线程运行到一半就突然停止了,改用multiprocessing,用法和threading差不多,听说使用multiprocessing时耗费CPU,但是进程不会戛然而止
唯一需要解决的问题就是多进程之间的信息共享,我用了multiprocessing的Manager
微信截图_20220310230844.png
[Asm] 纯文本查看 复制代码
dic_user = Manager().dict()

我设置了一个字典,暂时保存各进程下的用户数据和新获取的数据
但是我又又遇到了问题,字典好像不能进行二级存储,比如
[Python] 纯文本查看 复制代码
dic_user['一级']['二级']='二级的数据储存不了'

后来查了一下才知道要写完整,比如
[Python] 纯文本查看 复制代码
dic_user[username]={'cookie':cookie,'所有课程地址':list_allCourse}

这样可以完整保存数据,就是有点不习惯,所以有时候会迷糊

5、效果
凌晨4点5个号开始挂课时
微信图片_20220310231727.png

一直到早上9点多,已经有2个号完成了,在挂其他3个号
微信图片编辑_20220310231717.jpg

结尾:
还想用异步来着,还没看太懂,欢迎懂得老师给点建议或者哪里可以学习

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
netspirit + 1 热心回复!
开心熊猫741 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

xingyi0777 发表于 2022-3-11 10:05
求个成品 最近正在用油猴刷课
bester 发表于 2022-3-11 11:31
xingyi0777 发表于 2022-3-11 14:38
 楼主| xhtdtk 发表于 2022-3-12 22:33
xingyi0777 发表于 2022-3-11 10:05
求个成品 最近正在用油猴刷课

可以给我账号,我帮你刷完吧
会瘦的胖子 发表于 2022-3-21 19:51
bester 发表于 2022-3-11 11:31
油猴可以挂某书?

是青书吗?
cuixiaobei 发表于 2022-6-4 19:12
私信您了,可能您在忙,成品可以求一个么?
zm55555 发表于 2022-6-5 09:28
谢谢分享!
a320321322 发表于 2022-6-18 15:14
可以处理吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 05:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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