首页
统计
邻居
留言
关于
Search
1
彩虹商城系统开发API文档
4,372 阅读
2
IntelliJ IDEA 报错TextMate bundle load error: Bundle kotlin can't be registered
3,764 阅读
3
使用RaiDrive将网盘映射为本地磁盘
2,198 阅读
4
谷歌浏览器 Google Chrome 69.0.3497.100 正式稳定版、测试版及开发版本大全
2,148 阅读
5
抖音、小红书、快手 免费三网解析去水印小工具
2,066 阅读
精选推荐
源码分享
软件下载
影视资源
经验教程
模板插件
Emlogo
Wordpress
浮夸小生。
情感杂文
趣味生活
影视后期
Java学习笔记
登录
Search
标签搜索
个人分享
Wordpress
浮夸小生。
Wordpress教程
Java
PHP
Wordpress优化
Java笔记
网络技巧
网站
CDN
Windows
又拍云
教程
浏览器
IntelliJ IDEA
html
建站教程
微信
情感杂文
浮夸小生。
累计撰写
83
篇文章
累计收到
222
条评论
首页
栏目
精选推荐
源码分享
软件下载
影视资源
经验教程
模板插件
Emlogo
Wordpress
浮夸小生。
情感杂文
趣味生活
影视后期
Java学习笔记
页面
统计
邻居
留言
关于
搜索到
1
篇与
python
的结果
2023-12-03
长江雨课堂刷课原理分析记录-python脚本技
前言 本篇文章仅限于技术交流-请勿用于商业用途。(如有侵权请联系我,24小时内删除该文章) 起因:高中好哥们(假小子->变大美女)问我长江雨课堂能不能shua课???? emmm...这真不好拒绝,直接抓包分析!!!视频 通过浏览器发包分析 存在心跳包 每五秒一次,接口 以及 发包参数如下:#接口: https://changjiang.yuketang.cn/video-log/heartbeat/ #发包参数: 'heart_data': [ { 'i': 5, #常量 'et': 'playing', #播放操作 'p': 'web', #常量 'n': 'ali-cdn.xuetangx.com',#常量 'lob': 'ykt',# 常量 'cp': videoTime, # 播放进度 ->>>>>>>模拟生成 'fp': 0, # 常量 'tp': videoTime, # 视频时长 'sp': 1,# 常量 'ts': int(time.time() * 1000), # 时间戳 13位 我这里用python直接模拟的 'u': u,# user_id 'uip': '',# 常量 'c': c,# course_id 'v': v,# 视频id 'skuid': skuid, # skuid 'classroomid': classroomid, #classroom_id 'cc': cc, # 常量 'd': duration, # 视频时常 'pg': pg, #视频id + 随机字符串 可以写死 'sq': 2, # 常量 't': 'video', # 常量 'cards_id': 0, # 常量 'slide': 0, # 常量 'v_url': '', # 常量 } ] #以上视频参数 可以在以下接口获取参数值: https://changjiang.yuketang.cn/c27/online_courseware/xty/kls/pub_news/'+课件id+'/ #课件id的值通过该元素获取courseware_idpython代码目前只完成了 视频代码部分(默认是全部课程都刷->按顺序刷课)我没有学过python,代码很烂 勿喷import json import time import random import re import requests #cookies 填写自己的即可 cookies = {} # 课程列表 def course_list(): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/index', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'university-id': '0', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'uv-id': '0', 'xt-agent': 'web', 'xtbz': 'ykt', } params = { 'identity': '2', } response = requests.get('https://changjiang.yuketang.cn/v2/api/web/courses/list', params=params, cookies=cookies, headers=headers) return response.text ## 访问课程链接 def course_info(course_id): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'classroom-id': '14037619', # 'cookie': 'JG_fcdf8e635093adde6bef42651_PV=1701342457885|1701342464783; django_language=zh-cn; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjMWY3MTE4MzAxNmQ2LTBjZTM0NjRkYWQ4YmQ1OC0xNjUyNTYzNC0yMDczNjAwLTE4YzFmNzExODMxMjZhNyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%7D; sajssdk_2015_cross_new_user=1; csrftoken=kWczx89mCJgThyBIBlOitizxRIH7Tuef; sessionid=byzyzsb66yxmrf0vy702ap05mm88i74d; user_role=-1; classroomId=14037619; classroom_id=14037619; JG_fcdf8e635093adde6bef42651_PV=1701342457656|1701342457656', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/studentLog/14037619', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'university-id': '2868', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'uv-id': '2868', 'xt-agent': 'web', 'xtbz': 'ykt', } params = { 'actype': '-1', 'page': '0', 'offset': '20', 'sort': '-1', } response = requests.get( 'https://changjiang.yuketang.cn/v2/api/web/logs/learn/'+str(course_id), params=params, cookies=cookies,headers=headers) return response.text def courseware(id): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'classroom-id': '14037619', # 'cookie': 'django_language=zh-cn; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjMWY3MTE4MzAxNmQ2LTBjZTM0NjRkYWQ4YmQ1OC0xNjUyNTYzNC0yMDczNjAwLTE4YzFmNzExODMxMjZhNyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%7D; sajssdk_2015_cross_new_user=1; csrftoken=kWczx89mCJgThyBIBlOitizxRIH7Tuef; sessionid=byzyzsb66yxmrf0vy702ap05mm88i74d; user_role=-1; classroomId=14037619; classroom_id=14037619; JG_fcdf8e635093adde6bef42651_PV=1701342457656|1701342457656', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/studentLog/14037619', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'university-id': '2868', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'uv-id': '2868', 'x-csrftoken': 'kWczx89mCJgThyBIBlOitizxRIH7Tuef', 'xt-agent': 'web', 'xtbz': 'ykt', } response = requests.get( 'https://changjiang.yuketang.cn/c27/online_courseware/xty/kls/pub_news/'+id+'/', cookies=cookies, headers=headers, ) return response.text def coursePageInfo(course_id, id): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'classroom-id': '14037619', # 'cookie': 'django_language=zh-cn; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjMWY3MTE4MzAxNmQ2LTBjZTM0NjRkYWQ4YmQ1OC0xNjUyNTYzNC0yMDczNjAwLTE4YzFmNzExODMxMjZhNyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%7D; sajssdk_2015_cross_new_user=1; csrftoken=kWczx89mCJgThyBIBlOitizxRIH7Tuef; sessionid=byzyzsb66yxmrf0vy702ap05mm88i74d; user_role=-1; classroomId=14037619; classroom_id=14037619; JG_fcdf8e635093adde6bef42651_PV=1701342457656|1701342457656', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/14037619/18867446', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'university-id': '2868', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'uv-id': '2868', 'xt-agent': 'web', 'xtbz': 'ykt', } response = requests.get( 'https://changjiang.yuketang.cn/mooc-api/v1/lms/learn/leaf_info/'+str(course_id)+'/'+str(id)+'/', cookies=cookies, headers=headers, ) return response.text def is_course_success(course_id, user_id, classroom_id, video_id): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': 'application/json, text/plain, */*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'classroom-id': '14037619', # 'cookie': 'django_language=zh-cn; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjMWY3MTE4MzAxNmQ2LTBjZTM0NjRkYWQ4YmQ1OC0xNjUyNTYzNC0yMDczNjAwLTE4YzFmNzExODMxMjZhNyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%7D; csrftoken=kWczx89mCJgThyBIBlOitizxRIH7Tuef; sessionid=byzyzsb66yxmrf0vy702ap05mm88i74d; user_role=-1; classroomId=14037619; classroom_id=14037619; JG_fcdf8e635093adde6bef42651_PV=1701342457656|1701342457656', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/14037619/18867444', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'university-id': '2868', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'uv-id': '2868', 'xt-agent': 'web', 'xtbz': 'ykt', } params = { 'cid': course_id, 'user_id': user_id, 'classroom_id': classroom_id, 'video_type': 'video', 'vtype': 'rate', 'video_id': video_id, 'snapshot': '1', } response = requests.get( 'https://changjiang.yuketang.cn/video-log/get_video_watch_progress/', params=params, cookies=cookies, headers=headers, ) return response.text def shuake(duration, videoTime, u, c,v,skuid,classroomid,cc, pg): headers = { 'authority': 'changjiang.yuketang.cn', 'accept': '*/*', 'accept-language': 'zh-CN,zh;q=0.9', 'cache-control': 'no-cache', 'classroom-id': '14037619', 'content-type': 'application/json', # 'cookie': 'django_language=zh-cn; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjMWY3MTE4MzAxNmQ2LTBjZTM0NjRkYWQ4YmQ1OC0xNjUyNTYzNC0yMDczNjAwLTE4YzFmNzExODMxMjZhNyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c1f71183016d6-0ce3464dad8bd58-16525634-2073600-18c1f71183126a7%22%7D; sajssdk_2015_cross_new_user=1; csrftoken=kWczx89mCJgThyBIBlOitizxRIH7Tuef; sessionid=byzyzsb66yxmrf0vy702ap05mm88i74d; user_role=-1; classroomId=14037619; classroom_id=14037619; JG_fcdf8e635093adde6bef42651_PV=1701342457656|1701342457656', 'origin': 'https://changjiang.yuketang.cn', 'pragma': 'no-cache', 'referer': 'https://changjiang.yuketang.cn/v2/web/xcloud/video-student/14037619/18867447', 'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36', 'x-csrftoken': 'kWczx89mCJgThyBIBlOitizxRIH7Tuef', 'x-requested-with': 'XMLHttpRequest', 'xtbz': 'ykt', } json_data = { 'heart_data': [ { 'i': 5, 'et': 'playing', 'p': 'web', 'n': 'ali-cdn.xuetangx.com', 'lob': 'ykt', 'cp': videoTime, 'fp': 0, 'tp': videoTime, 'sp': 1, 'ts': int(time.time() * 1000), 'u': u, 'uip': '', 'c': c, 'v': v, 'skuid': skuid, 'classroomid': classroomid, 'cc': cc, 'd': duration, 'pg': pg, 'sq': 2, 't': 'video', 'cards_id': 0, 'slide': 0, 'v_url': '', } ] } response = requests.post('https://changjiang.yuketang.cn/video-log/heartbeat/', cookies=cookies, headers=headers, json=json_data) if __name__ == '__main__': json_str = course_list() data = json.loads(json_str) course_lst= data['data']['list'] ## 遍历课程 刷课 for course_lst in course_lst: ## 获取课程id 全部刷 course_id = course_lst['classroom_id'] # 假设course_info()方法返回的是一个JSON字符串 json_str = course_info(course_id) # 解析JSON字符串为Python对象 data = json.loads(json_str) activities = data['data']['activities'] # 遍历JSON对象 for activity in activities: if 'type' in activity: type = activity['type'] # 公告 if type == 9: print('这是一个公告') pass # 期末测试 elif type == 20: print('这是期末测试') pass elif type == 15: # 全部单元Id courseware_id = activity['courseware_id'] json_str = courseware(courseware_id) data = json.loads(json_str) content_info = data['data']['content_info'] for content_info in content_info: print(content_info['name']) for section_list in content_info['section_list']: time.sleep(1) randomStr = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz0123456789', k=6)) courseChapterId = section_list['leaf_list'][0]['id'] # 注意这个位置 可能有的页面有多个任务而被忽略 video_name = section_list['name'] print(video_name, courseChapterId) # 进入课程界面 json_str = coursePageInfo(course_id, courseChapterId) data = json.loads(json_str) videoInfo = data['data'] c = videoInfo['course_id'] cc = videoInfo['content_info']['media']['ccid'] classroomid = videoInfo['classroom_id'] # cp 播放时长 d = videoInfo['content_info']['media']['duration'] sku_id = videoInfo['sku_id'] pg = str(videoInfo['id']) + "_" + randomStr v = videoInfo['id'] u = videoInfo['user_id'] progress = is_course_success(c, u, classroomid, v) if_completed = '0' try: if_completed = re.search(r'"completed":(.+?),', progress).group(1) except: pass if if_completed == '1': print(video_name, '\033[31m学习完成,跳过\033[0m') continue else: print(video_name + ",尚未学习,现在开始自动学习") videoTime = 0 while True: if videoTime >= d: videoTime == d shuake(d, videoTime, u, c, v, sku_id, classroomid, cc, pg) print(video_name, '\033[31m学习完成\033[0m') break # 模拟每5秒递增5,实际应用时需要替换为实际的递增逻辑 videoTime += 5 # 判断当前播放时长是否超过视频总时长 # 发送心跳请求 shuake(d, videoTime, u, c, v, sku_id, classroomid, cc, pg) print('学习时长:', videoTime) time.sleep(5) else: pass
2023年12月03日
433 阅读
0 评论
0 点赞