Greasy Fork is available in English.

CourseHunters

This Script will let you download course from coursehunters.

// ==UserScript==
// @name         CourseHunters
// @namespace    https://greasyfork.org/en/users/153343-indi-cracker
// @version      1.4
// @description  This Script will let you download course from coursehunters.
// @author       Indicracker
// @match        https://coursehunter.net/course/*
// @grant        none

// @require      https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.5/jszip.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.js



// ==/UserScript==

// UI Elements

const lessonLinkElement = document.querySelectorAll('link[itemprop~=contentUrl]'),
      lessonNameElement = document.querySelectorAll('.lessons-name'),
      body = document.querySelector('body'),
      courseName = document.querySelector('.hero-description');

// Data Container
const lessonLink = [],
      lessonName = [];

(function() {
  'use strict';

  // Init UI
  initUI();
  // Get Course Link and structure Download Data
  getCourseLinks();


  function downloadX(filename, datatype, text) {
    let element = document.createElement('a');
    element.setAttribute('href', 'data:' + datatype + ';charset=utf-8,' + encodeURIComponent(text));
    element.setAttribute('download', filename);

    element.style.display = 'none';
    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);
  }

  function createIDM() {
    let list =
      'IF EXIST %PROGRAMFILES(X86)%\n(cd "%ProgramFiles(x86)%\\Internet Download Manager")\nELSE (cd "%ProgramFiles%\\Internet Download Manager")\n';
    for (let i = 0; i < lessonLinkElement.length; i++) {
      list +=
        'IDMan.exe  /n /p "%UserProfile%\\Downloads\\CourseHunter\\' +
        courseName.textContent +
        '" /a /f "' +
        lessonName[i] +
        '.mp4" /d "' +
        encodeURI(lessonLink[i]) +
        '"\n';
    }
    list += 'IDMan.exe /s \n';
    list += 'IDMan.exe';
    var zip = new JSZip();
    zip.file('IDMan.bat', list);
    zip.generateAsync({type: 'blob'}).then(function(content) {
      saveAs(content, courseName.textContent + '.zip');
    });
  }
    function initUI() {
    //append UI
    body.innerHTML += `<div id="downloader-container" style="z-index: 999; width: 450px; height: 160px; color: white; background: linear-gradient(to right, #0984e3, #00cec9); border-radius: 20px; box-shadow: 0px 0px 30px #2c3e50; font-family: sans-serif; position:fixed; bottom: 10px; left: 10px;"> <style>input[type=number]{border-radius: 5px; border: 0;}</style> <div id="downloader-items" style="display: table; float: left;"> <p id="course-p" style="font-size: 15px; margin-top:20px; margin-left: 20px; width: 300px; height: 45px;">Fundamentals of the C Programming Language</p><div style="margin-left: 20px;"> <span for="start">Start:</span> <input style="width: 50px; height: 30px; text-align: center; margin-right: 20px;" type="number" name="start" id="start" value="1" disabled> <span for="end">End:</span> <input style="width: 50px; height: 30px; text-align: center; " type="number" name="end" id="end" value="" disabled> </div></div><div style="display: table; float: left; position: absolute; bottom: 50px; left: 250px;"> <input id="txt" type="checkbox" style=" vertical-align: middle; "> Text <br><input id="idm" type="checkbox" style=" vertical-align: middle;" checked> IDM </div><div style="clear: both;"></div><div class="download-section"style="cursor: pointer; float: right; width: 100px; height: 100px; border-radius: 50%; margin-right: 30px; text-align: center; position: absolute; top: 40px; left: 330px; background: linear-gradient(to right, #ecf0f1, #bdc3c7); box-shadow: 0px 0px 10px #2c3e50;"> <img class="dwn-img" src="https://s31.postimg.cc/ava5xpnrv/ios7-cloud-download-outline.png" style="display: table-cell; margin: 0 auto; width: 50px; margin-top: 25px;"> </div><a href="https://greasyfork.org/en/scripts/40914-coursehunters" target="_blank" style="display: block; font-size: 25px; text-decoration: none; font-family: 'open Sans'; position: absolute; bottom: 10px; left: 20px; box-shadow: 0 0 0 1px;">HELP ?</a> </div>`;
    //UI Elements
    const Course_Name = document.querySelector('#course-p'),
      uiContainer = document.querySelector('#downloader-container'),
      end = document.querySelector('#end');

    Course_Name.textContent = courseName.textContent;
    end.value = lessonLinkElement.length;
  }
    function getCourseLinks() {
    for (let o = 0; o < lessonLinkElement.length; o++) {
      lessonLink.push(lessonLinkElement[o].href);
    }

    for (let n = 0; n < lessonNameElement.length; n++) {
      lessonName.push(lessonNameElement[n].innerHTML.replace('Урок', 'Lesson').replace(/\s/g, '_').replace(':','-'));
    }

    let lessonDownload = lessonLink.map((el, i) => el + '[' + lessonName[i] + '.mp4\n').join(' ');

    console.clear();

    //Download
    let downloadBtn = document.querySelector('.download-section');
    let idm = document.querySelector('#idm');
    let text = document.querySelector('#txt');

    downloadBtn.addEventListener('click', e => {
      if (text.checked && idm.checked) {
        alert(`Choose only one; "TEXT" or "IDM"`);
      } else if(!text.checked && !idm.checked) {
         alert(`Tick "TEXT" or "IDM"`);
      } else {
        text.checked ? downloadX('list.txt', 'text/plain', lessonDownload) : createIDM();
      }
      e.preventDefault();
    });
  }

})();