• 【麦课在线教育mycourse】利用Js快速刷完新生安全教育课程


    0. 注意

    全文仅供学习参考,有时间的同学还是请认认真真的刷课。

    1. 解决方法

    1. 用浏览器(建议用chrome)打开课程主页weiban.mycourse.cn

    2. F12打开开发者工具,打开console,然后切换javascript contextmcwkmycourse.cn

    在这里插入图片描述

    1. 输入finishWxCourse();回车即可!

    在这里插入图片描述

    1. 返回课程列表页面,查看该节课是否已完成?

    Ps: 注意以下几点:

    • 如果返回到课程列表页面,该节课是未完成状态,可能是缓存,可以重新执行上述步骤,或者先刷其他课,隔一段时间再看是否已完成。

    2. 分析

    登录之后,点击新生课堂

    在这里插入图片描述

    然后随便一门课

    在这里插入图片描述
    在这里插入图片描述

    就第一个 防盗知识-基础篇吧,完成该节课学习之后,弹出来一个alert。

    在这里插入图片描述

    看到嵌入式页面,可以猜测是从<iframe></iframe>中弹出来的。

    同时,我们可以从network中看到多一个请求

    在这里插入图片描述

    根据字面意思,大概就是向服务器发送请求表明我已经完成了该节课的学习。

    通过查看该请求的Initiator(下图),可以得知该请求是从wx.jsfinishWxCourse()发起的。

    在这里插入图片描述

    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. 总结

    很意外找到此方法!他并没有用到瑞数那种比较复杂的反爬技术,仅供学习参考吧!

    另外,该课程的考试比较简单,建议开两个窗口,一个是考试窗口,另一个用百度在过程中搜题!

  • 相关阅读:
    rabbitmq队列
    什么是RPC
    图解rabbitmq
    rabbitmq的面试题
    nginx介绍
    nginx正向代理和反向代理
    负载均衡 分布式 集群
    Nginx的负载均衡
    缓存雪崩 穿透 击穿
    Python Day32:UDP协议、UDP与TCP协议的区别、以及其服务端、客户端标准代码
  • 原文地址:https://www.cnblogs.com/yjz6/p/15025556.html
Copyright © 2020-2023  润新知