文章目錄
- 前言
- 一、程式實作效果視頻展示
- 二、長江雨課堂簡介
- 三、需求簡介
- 四、程式簡介
- 所需第三方庫
- 程式部分函式
- 例外處理
- 程式源代碼
前言
本文主要針對長江雨課堂中,考試后老師禁止查看試卷和答案這一問題,提供一種合理且快捷的獲取方法, 通過使用Python及其相關第三方庫,能夠輕易地獲取禁止查看的試卷的題目+標準答案+我的答案+分析,適合的題型范圍包括選擇題、填空題、判斷題、問答題,
溫馨提示: 友情告誡各位讀者,切莫將本文所講解的方法用于不正當競爭以及舞弊行為,否則,所造成的一切后果與本平臺無關、與本文無關、與編者無關,一切解釋權僅歸編者所有,
提示:以下是本篇文章正文內容,下面案例僅供參考與學習
一、程式實作效果視頻展示
視頻網址:https://www.hfutblog.com/jiami/demo.mp4
二、長江雨課堂簡介
長江雨課堂屬于雨課堂系列教學產品,由學堂在線與清華大學在線教育辦公室共同研發,旨在連接師生的智能終端,將課前-課上-課后的每一個環節都賦予全新的體驗,最大限度地釋放教與學的能量,推動教學改革,長江雨課堂將復雜的資訊技術手段融入到PowerPoint和微信,在課外預習與課堂教學間建立溝通橋梁,讓課堂互動永不下線,使用長江雨課堂,教師可以將帶有MOOC視頻、習題、語音的課前預習課件推送到學生手機,師生溝通及時反饋;課堂上實時答題、彈幕互動,為傳統課堂教學師生互動提供了完美解決方案,長江雨課堂科學地覆寫了課前-課上-課后的每一個教學環節,為師生提供完整立體的資料支持,個性化報表、自動任務提醒,讓教與學更明了,
網址:https://changjiang.yuketang.cn/
你以為我在為長江雨課堂打廣告??? 俗話說知己知彼,方能百戰不殆,所以我們要對長江雨課堂有一個大概了解,我們才能在學習中駕馭這款教學產品,為我們的學習提供極大的簡便和幫助,在此,讀者需要對長江雨課堂的登錄方式有一個大概的了解,才能把我為大家提供的方法駕馭好,
長江雨課堂有四種登錄方式:掃碼登錄、手機登錄、短信登錄、郵箱登錄,這些登錄方式都有一個共同的特點----依賴cookie和session,而程式需要讀者的cookie和session資訊來進行登錄,從而進行后續相關操作,編者提供的程式中為大家提供以下兩種登錄方式:
方式一:
手機號+密碼(加密后)登錄,在if name == ‘main’:之后的代碼中找到tel與pwd欄位,并修改為相應的值,
考慮到加密后的密碼需要使用抓包工具(如:Fiddler)來獲取,使用較為麻煩,為了方便大家使用,本人研究了長江雨課堂的密碼加密機制,為RSA加密,在此,本人為大家提供了一個獲取加密后密碼的平臺(為編者提供,安全可靠)
獲取加密后密碼平臺網址:https://www.hfutblog.com/jiami/rainlogin.html
tel = "你的注冊電話號碼"
pwd = "你的加密后的密碼"
cookieStr = login(tel,pwd)
#如:
tel = "199****8888"
pwd = "jEfv/7abc7aOqcyxDwgmloBaO3mqMIA1zFHsx7y9mMwW+oUA7/OOxPYZWQIcZRa4ZwBbUC0uhD3gnbuP41DDA+T98/c/sodbcLLXmEmX7buhFOt9bfl1SwT8OlV/f1Yd1k5nNipeku8vV0c9o2IKdpvmONbDKHj2Z6X0QfONUvk="
cookieStr = login(tel,pwd)
方式二:
獲取cookie登錄,在運行程式時輸入0即可通過cookie按照程式提示進行登錄,

獲取csrftoken和sessionid欄位的方法如下:
步驟一:在長江雨課堂網頁版登錄長江雨課堂,(可以通過上文見過的四種方式登錄)
步驟二:登錄后,按“F12”鍵打開開發者工具,打開后點擊Network,然后重繪一下頁面,找到并點擊index,在右側欄目中找到cookie,然后cookie中會包括csrftoken和sessionid欄位的值,復制即可,

兩種方式對比:
方式一:這種登錄方法長久有效,賬戶資訊不變時不需要再次修改或更新,
方式二:這種登錄方法有時效性,需要及時更新cookieinfo[‘csrftoken’]和cookieinfo[‘sessionid’]的值,
三、需求簡介
老師發布試卷時設定了“交卷后不可查看”,十分不利于學習和交流,以及進一步操作,

通過本人寫的python程式,可以十分便捷地獲取題目圖片以及答案等相關試卷資訊,

四、程式簡介
所需第三方庫
程式需要的Python第三方庫和包有base64、time、json、re、requests、os、urllib.request,其中,base64、time、json、re、os庫均為python自帶的第三方庫,不需要額外安裝,點擊查看如何安裝第三方庫,
import base64
import time
import json
import re
import requests
import os
import urllib.request
程式部分函式
以下只寫出程式中主要的功能函式:
函式一: 登錄函式login()和smlogin()
login() 函式的作用是通過POST提交手機號和加密以后的密碼進行登錄,獲取用戶的session資訊,使程式維持登錄的狀態,是后續功能的基礎,smlogin() 函式的作用是用戶直接輸入session資訊,使程式維持登錄的狀態,這兩種函式只需任意執行一個,即可完成程式保持登錄,
def login(tel,pwd):
url = 'https://changjiang.yuketang.cn/pc/login/verify_pwd_login/'
data = {
"type":"PP",
"name":tel,
"pwd":pwd
}
headers={
'Connection': 'keep-alive',
'Content-Language':'zh-cn',
'Content-Type': 'text/html; charset=utf-8',
'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.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Host': 'changjiang.yuketang.cn',
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36'
}
try:
session = requests.session()
cookie_jar = session.post(url=url,json=data,headers=headers,verify=False).cookies
cookie_t = requests.utils.dict_from_cookiejar(cookie_jar)
cookieStr = "csrftoken=" + cookie_t['csrftoken'] + ";" + "sessionid=" + cookie_t['sessionid']
return cookieStr
except:
return False
def smlogin(cookieinfo):
try:
cookie_t = cookieinfo
cookieStr = "csrftoken=" + cookie_t['csrftoken'] + ";" + "sessionid=" + cookie_t['sessionid']
return cookieStr
except:
return False
函式二: 查找課程資訊函式showCourse()
該函式的作用是通過GET獲取用戶在長江雨課堂的課程資訊,
def showCourse(cookieStr):
cookie = cookieStr
url = "https://changjiang.yuketang.cn/v/course_meta/my_courses?_date="
curtime = "{0:.3f}".format(float(time.time())).replace(".","")
url += curtime
try:
headers={
'accept':'*/*',
'accept-language':'zh-CN,zh;q=0.9',
'connection':'keep-alive',
'referer':url,
'Cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
response = requests.get(url=url,headers=headers,verify=False)
courseinfo = response.json()
return courseinfo['data']['classrooms']
except:
return False
函式三: 查找課程資訊函式getDetailQuery()
該函式的作用是通過GET獲取用戶所查詢課程的所有考試的詳細資訊,
def getDetailQuery(cookie,course_id,classroom_id):
#獲取每門課程考試的Id
curtime = "{0:.3f}".format(float(time.time())).replace(".","")
url = "https://changjiang.yuketang.cn/v/course_meta/classroom_logs?course_id=" + course_id + "&classroom_id=" + classroom_id + "&activity_type=-1&date_time=" + curtime
#print(url)
try:
headers={
'accept':'*/*',
'accept-language':'zh-CN,zh;q=0.9',
'connection':'keep-alive',
'referer':url,
'Cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
response = requests.get(url=url,headers=headers,verify=False)
exam = response.json()
return exam['data']['activities']
except:
return False
函式四: 獲取查詢試卷加密題目資訊函式getHtml()
該函式的作用是通過GET獲取用戶所要查詢試卷加密的題目資訊,雖然老師設定了“交卷后不可查看”,但是從試卷的HTML代碼中卻有經過base64加密過的試卷資訊,
def getHtml(cookie,query,rawaddr):
url = "https://changjiang.yuketang.cn/quiz/quiz_info/" + query + "/"
try:
headers={
'accept':'*/*',
'accept-language':'zh-CN,zh;q=0.9',
'connection':'keep-alive',
'referer':url,
'Cookie': cookie,
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
response = requests.get(url=url,headers=headers,verify=False)
exam = response.text
fo = open(rawaddr,'w')
fo.write(exam)
fo.close()
return True
except:
return False
函式五: base64解密函式base64Decode()
該函式的作用是將base64加密過的試卷資訊進行解密操作,
def base64Decode(rawCode):
try:
mystr = rawCode
str_url = base64.b64decode(mystr).decode("utf-8")
return str_url
except:
return False
例外處理
程式已經比較完善地解決了可能出現的例外問題,如:登錄例外、查詢課程不存在、查詢考試不存在等,各位讀者可以放心使用,
程式源代碼
程式源代碼接近500行,均為本人耗費大量時間所寫,各位讀者可以瀏覽第一部分的展示視頻,根據自身的真實情況,通過以下鏈接進行獲取和下載:
程式源代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/264527.html
標籤:其他
