Directly Download the Files in Google Classroom using Ctrl Click
// ==UserScript== // @name Direct File for Google Classroom // @namespace http://tampermonkey.net/ // @version 0.4.1 // @description Directly Download the Files in Google Classroom using Ctrl Click // @author You // @match https://classroom.google.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=google.com // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // Your code here... const M_HREF = "https://drive.google.com/file/d/" const linkElmOnClick = function (evt) { // const linkElm = this; evt.stopPropagation(); evt.stopImmediatePropagation(); }; let pageChangedFlag = false; const onPageChanged = () => { if (!pageChangedFlag) return; const linkSelector = `[href*="${M_HREF}"]:not([data-ozhref])`; if (!document.querySelector(linkSelector)) return; const links = document.querySelectorAll(linkSelector); for (const linkElm of links) { const orhref = linkElm.href; linkElm.dataset.ozhref = orhref; const mres = orhref.match(/https:\/\/drive\.google\.com\/file\/d\/([0-9a-zA-Z\-_+.·]+)\/\w+/); // id should be /[0-9a-zA-Z\-_+]+/ in general if (!mres) continue; const dfileId = `${mres[1]}`; // let newHref=`https://drive.google.com/u/1/uc?id=${mres[1]}&export=download`; let uo = null; try { uo = new URL(orhref); } catch (e) { } if (!uo) continue; const uo2 = new URL(`https://drive.google.com/uc?export=download&id=${dfileId}`); uo.searchParams.forEach((value, key) => { if (key === 'export' || key === 'id') return; uo2.searchParams.set(key, value); }); const newHref = uo2.toString(); if (!newHref || typeof newHref !== 'string') continue; // console.log(orhref, newHref) // linkElm.setAttribute('href',newHref) // let newHref = `https://drive.google.com/uc?export=download&id=${dfileId}&usp=drive_web&authuser=2` linkElm.setAttribute('href', newHref); linkElm.setAttribute('target', '_blank'); linkElm.addEventListener('click', linkElmOnClick, true); } }; new MutationObserver(() => { pageChangedFlag = true; Promise.resolve().then(onPageChanged); }).observe(document, { subtree: true, childList: true }); try { // trigger onPageChanged document.documentElement.appendChild(document.createElement('noscript')); } catch (e) { } })();