0. 注意
全文僅供學習參考,有時間的同學還是請認認真真的刷課。
1. 解決方法
-
用瀏覽器(建議用chrome)打開課程主頁
weiban.mycourse.cn
-
F12
打開開發者工具,打開console
,然后切換javascript context
為mcwkmycourse.cn
- 輸入
finishWxCourse();
回車即可!
- 返回課程列表頁面,查看該節課是否已完成?
Ps: 注意以下幾點:
- 如果返回到課程列表頁面,該節課是未完成狀態,可能是緩存,可以重新執行上述步驟,或者先刷其他課,隔一段時間再看是否已完成。
2. 分析
登錄之后,點擊新生課堂
然后隨便一門課
就第一個 防盜知識-基礎篇
吧,完成該節課學習之后,彈出來一個alert。
看到嵌入式頁面,可以猜測是從<iframe></iframe>
中彈出來的。
同時,我們可以從network
中看到多一個請求
根據字面意思,大概就是向服務器發送請求表明我已經完成了該節課的學習。
通過查看該請求的Initiator
(下圖),可以得知該請求是從wx.js
的finishWxCourse()
發起的。
wx.js
中的finishWxCourse()
如下:
function finishWxCourse() {
try{console.log(exportRoot.currentFrame)}catch(e){}
try {
var userid = getQueryString("userCourseId");
var jiaoxuejihuaid = getQueryString("tenantCode");
var finishWxHost = document.referrer.replace("http://","").replace("https://","").split("/")[0];
if(document.referrer=="" || document.referrer==null || document.referrer==undefined){
finishWxHost = "weiban.mycourse.cn"
}
var webUrl = window.location.href;
var finishWxUrl=getRecordUrl(webUrl);
if(finishWxHost.indexOf("218.25.139.161") > 0){
//finishWxUrl = "http://"+finishWxHost+"/pharos/usercourse/finish.do";
finishWxUrl = "https://"+finishWxHost+"/pharos/usercourse/finish.do";
}
var finishData = {"userCourseId": userid, "tenantCode": jiaoxuejihuaid};
$.ajax({
async: false,
url: finishWxUrl,
type: "GET",
dataType: "jsonp",
data: finishData,
timeout: 5000,
success : function (data) {
if (data.msg == "ok") {
alert("恭喜,您已完成本微課的學習");
} else {
alert("發送完成失敗");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
} catch (e) {
alert("報了啥錯誤" + e)
}
}
可以看到該函數主要就是拿到var finishData = {"userCourseId": userid, "tenantCode": jiaoxuejihuaid};
之后發起Ajax請求。
那我們先直接無腦在console
中直接運行該函數,看能得到什么結果。
注意此處將javascript context
切換到mcwk.mycourse.cn
這個iframe
中。
結果運行如下:
返回到課程頁面,可以看到該課程已完成。
3. 總結
很意外找到此方法!他並沒有用到瑞數那種比較復雜的反爬技術,僅供學習參考吧!
另外,該課程的考試比較簡單,建議開兩個窗口,一個是考試窗口,另一個用百度在過程中搜題!