2022 CMES 민방위 사이버 교육 스킵 스크립트

date
Jul 24, 2022
slug
cmes-auto-script-2022
status
Published
tags
etc
type
Post
comment
comment
summary
CMES 사이버교육센터의 교육 이수 스크립트입니다. https://www.cmes.or.kr에 최적화 된 스크립트로 타 민방위 사이버 교육센터 사이트에서는 작동하지 않습니다. (e.g. CDEC)
민방위 사이버교육센터의 교육 이수 스크립트입니다. https://www.cmes.or.kr 사이트에 최적화 된 스크립트로 타 민방위 사이버 교육센터 사이트에서는 작동하지 않습니다.
https://www.cmes.or.kr
수강 화면(동영상 보는 화면)에서 크롬의 개발자 도구를 여신 뒤에 (F12, ⌘+⌥+i) 아래 스크립트를 붙여넣기 하시면 해당 강의가 이수 처리됩니다.
마지막 평가 문제는 난이도가 어려운 편은 아니니 직접 푸시는 것을 권장드립니다~
 
(async () => {
  let interval;

  const accessToken = JSON.parse(JSON.parse(atob(localStorage.getItem("korn"))))
    .token;

  const viedoJs = document.querySelector(".video-js");
  viedoJs.player.pause();

  const videoDuration = viedoJs.player.duration() ?? 0;
  const breadcrumb = videoDuration % 30;
  const lastViewedTime = Math.floor(videoDuration - breadcrumb);

  const headers = {
    accept: "application/json, text/plain, */*",
    "content-type": "application/json;charset=UTF-8",
    "x-access-token": accessToken,
  };

  const getPlayInfo = async () => {
    const data = {
      seq: 1,
      cyber_time: 0,
    };

    const response = await fetch("https://api.cmes.or.kr/cyber/getPlayInfo", {
      headers,
      method: "POST",
    });

    if (response.status !== 200) {
      return data;
    }

    const result = await response.json();
    return result;
  };

  let { cyber_seq: seq, cyber_time: currentTime = 0 } = await getPlayInfo();

  const endVideo = async () => {
    const response = await fetch("https://api.cmes.or.kr/cyber/endPlay", {
      headers,
      method: "POST",
      body: `{\"seq\":${seq},\"mobile\":false}`,
    });

    if (response.status !== 200) {
      return;
    }

    const result = await response.text();

    if (String(result) !== "1") {
      console.log("failed");
      return;
    }

    alert("완료 처리\n다음 강의로 이동해주세요.");
    document.location.href = "https://www.cmes.or.kr/sddm/cyberList";
  };

  const setPlayTime = async () => {
    const response = await fetch("https://api.cmes.or.kr/cyber/setPlayTime", {
      headers,
      method: "POST",
      body: `{\"time\":\"${currentTime}\",\"seq\":${seq}}`,
    });

    if (response.status !== 200) {
      return;
    }

    const result = await response.text();

    if (String(result) !== "1") {
      console.log("failed");
      clearInterval(interval);
      return;
    }

    const progress = Math.floor((currentTime / lastViewedTime) * 100);
    console.log(`seq: ${seq}, 진행률: ${Math.floor(progress)}%`);
    
    currentTime += 30;

    if (currentTime < lastViewedTime) {
      return;
    }

    clearInterval(interval);
    endVideo();
  };

  interval = setInterval(setPlayTime, 1000);
})();
 

© chussum 2015 - 2024