xiang-video

湘潭学院学习网站

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         xiang-video
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  湘潭学院学习网站
// @author       galan99
// @match        www2.xtdx.superchutou.com/*
// @license      MIT
// @grant        none
// ==/UserScript==
 
/* 使用es6声明 */
/* jshint esversion: 6 */
 
(async function () {
  "use strict";
  function random(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
  }

  function sleep(time) {
    return new Promise((resolve) => setTimeout(resolve, time));
  }

  function extend(destination, source) {
    for (var property in source) destination[property] = source[property];
    return destination;
  }

  // 模拟人工点击 https://stackoverflow.com/questions/6157929/how-to-simulate-a-mouse-click-using-javascript
  /** 
   * 使用
   * simulate(document.getElementById("btn"), "click");
   * simulate(document.getElementById("btn"), "click", { pointerX: 123, pointerY: 321 })
   *
   * */ 
  function simulate(element, eventName) {
    var eventMatchers = {
      HTMLEvents:
        /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
      MouseEvents: /^(?:click|dblclick|mouse(?:down|up|over|move|out))$/,
    };
    var defaultOptions = {
      pointerX: 0,
      pointerY: 0,
      button: 0,
      ctrlKey: false,
      altKey: false,
      shiftKey: false,
      metaKey: false,
      bubbles: true,
      cancelable: true,
    };

    var options = extend(defaultOptions, arguments[2] || {});
    var oEvent,
      eventType = null;

    for (var name in eventMatchers) {
      if (eventMatchers[name].test(eventName)) {
        eventType = name;
        break;
      }
    }

    if (!eventType)
      throw new SyntaxError(
        "Only HTMLEvents and MouseEvents interfaces are supported"
      );

    if (document.createEvent) {
      oEvent = document.createEvent(eventType);
      if (eventType == "HTMLEvents") {
        oEvent.initEvent(eventName, options.bubbles, options.cancelable);
      } else {
        oEvent.initMouseEvent(
          eventName,
          options.bubbles,
          options.cancelable,
          document.defaultView,
          options.button,
          options.pointerX,
          options.pointerY,
          options.pointerX,
          options.pointerY,
          options.ctrlKey,
          options.altKey,
          options.shiftKey,
          options.metaKey,
          options.button,
          element
        );
      }
      element.dispatchEvent(oEvent);
    } else {
      options.clientX = options.pointerX;
      options.clientY = options.pointerY;
      var evt = document.createEventObject();
      oEvent = extend(evt, options);
      element.fireEvent("on" + eventName, oEvent);
    }
    return element;
  }

  // 方法2
  // document.getElementById('testTarget').dispatchEvent(new MouseEvent('click', {shiftKey: true}))

  // 方法3
  // Simulate human click in JavaScript https://stackoverflow.com/questions/7457603/simulate-human-click-in-javascript
  function callClickEvent(element) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", true, true);
    element.dispatchEvent(evt);
  }

  function callClickEvent2(element) {
    var evt = document.createEvent("MouseEvents");
    evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    element.dispatchEvent(evt);
  }

  var status = (await Notification.requestPermission()) === "granted";
  var popNotice = function () {
    if (Notification.permission == "granted") {
      var notification = new Notification("验证失败:", {
        body: "视频需要验证,请手动点击按钮进行验证",
        icon: "//image.zhangxinxu.com/image/study/s/s128/mm1.jpg",
      });
    }
  };

  async function run() {
    var code_el = document.querySelector("#SM_BTN_1");
    var slideBtn = document.querySelector(".slidetounlock");

    if (slideBtn) {
      if (status) {
        popNotice();
      }
      await sleep(1000 * 60 * 10);
    }

    if (code_el) {
      var timeNum = random(1, 5);
      await sleep(timeNum * 1000);
      simulate(code_el, "click");

      await sleep(1500);
      slideBtn = document.querySelector(".slidetounlock");

      if (slideBtn) {
        if (status) {
          popNotice();
        }
        console.log("自动验证失败,请手动验证");
        return;
      }

      console.log("自动验证成功");
      await sleep(1000 * 60 * 2);
      run();
    } else {
      await sleep(1000);
      run();
    }
  }
  run();
})();