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 사이트에 최적화 된 스크립트로 타 민방위 사이버 교육센터 사이트에서는 작동하지 않습니다.
수강 화면(동영상 보는 화면)에서 크롬의 개발자 도구를 여신 뒤에 (
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);
})();