try to take over the world!
当前为
// ==UserScript==
// @name VectorLMS
// @namespace http://tampermonkey.net/
// @version 1.0
// @description try to take over the world!
// @author savetheplanet07, wu5bocheng
// @match https://*.vectorlmsedu.com/training/*
// @icon https://cmu-pa.vectorlmsedu.com/favicon.ico
// @license MIT
// ==/UserScript==
//Vector LMS Auto Task Completion Script. Sequentially runs tracking_start and tracking_finish for each course_item (i.e. video) on the page.
function asyncWaitSeconds(seconds) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, seconds * 1000);
});
}
async function main() {
let TOC_items = document.getElementsByClassName("TOC_item");
let TOC_unwatched_videos = [];
//scrape the /training/launch/course_work/COURSEID page for video data
for (let i = 0; i < TOC_items.length; i++) {
try {
let data_entry = {}
data_entry.element = TOC_items[i];
data_entry.isVideo = TOC_items[i].querySelector(".fa-play") != null;
data_entry.href = TOC_items[i].getAttribute("href");
data_entry.title = TOC_items[i].querySelector(".lead").innerText;
let len = TOC_items[i].getAttribute("href").split("?")[0].split("/").length;
data_entry.work_id = TOC_items[i].getAttribute("href").split("?")[0].split("/")[len - 1];
data_entry.item_id = TOC_items[i].getAttribute("href").split("?")[0].split("/")[len - 2];
if (!data_entry.isVideo) {
continue;
}
data_entry.time_min = parseInt(TOC_items[i].querySelector(".span_link").innerText.split(" ")[1]) + .5;
data_entry.completed = false;
TOC_unwatched_videos.push(data_entry);
} catch (err) {
console.log("Error scraping TOC item: " + TOC_items[i].innerText);
console.log(err);
}
}
for (let i = 0; i < TOC_unwatched_videos.length; i++) {
let unwatched_video = TOC_unwatched_videos[i];
//request the tracking start
let tracking_start_url = "https://cmu-pa.vectorlmsedu.com/rpc/v2/json/training/tracking_start?course_item_id=" + unwatched_video.item_id + "&course_work_id=" + unwatched_video.work_id;
const tracking_start_response = await fetch(tracking_start_url);
let tracking_start_data = await tracking_start_response.json();
unwatched_video.work_hist_id = tracking_start_data.course_work_hist_id;
console.log("Video time tracking started for video: " + unwatched_video.title);
//delay for video length
console.log("Waiting for the length of the video, " + unwatched_video.time_min * 60 + " seconds...");
await asyncWaitSeconds(unwatched_video.time_min * 60);
//request the tracking finish
let tracking_finish_url = "https://cmu-pa.vectorlmsedu.com/rpc/v2/json/training/tracking_finish?course_work_hist_id=" + unwatched_video.work_hist_id + "&_=" + (Date.now() + unwatched_video.time_min * 60 * 1000).toString();
const tracking_finish_response = await fetch(tracking_finish_url);
let tracking_finish_data = await tracking_finish_response.json()
unwatched_video.completed = !(tracking_finish_data.tracking_status); //0 is completed, 1 is not completed, 2 is previously completed (but we filtered those)
if (unwatched_video.completed) {
console.log("Completed Video: " + unwatched_video.title);
unwatched_video.element.querySelector(".IconSquare").innerHTML = '<div style="height: 33px; width: 33px" class="IconSquare u-border-radius-4 u-overflow-hidden u-pos-relative" aria-hidden="true"><span><div class="color-overlay u-bg-tertiary-light"></div></span><div class="u-absolute-center u-text-center "><span class="fa fa-check fa-fw u-color-tertiary"></span></div></div>'; //Set Completed Checkbox
unwatched_video.element.querySelector(".hidden-xs").innerHTML = '<div class="badge u-text-capitalize u-border-radius-10 u-m-0 u-bg-tertiary-light u-color-tertiary-darker">Completed</div>'; //Set Completed Badge
}
else {
console.log("Failed to Complete Video: " + unwatched_video.title);
}
}
location.reload();
}
main().then();