您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Companion userscript for naurok bypass; Contains unstable and unfinished features and enhancements for the Testing pages.
// ==UserScript== // @name Naurok Bypass v2: Extras // @description Companion userscript for naurok bypass; Contains unstable and unfinished features and enhancements for the Testing pages. // @author griffi-gh // @namespace griffi-gh // @match https://naurok.com.ua/test/testing/* // @grant none // @grant GM_addStyle // @version 0.3 // @run-at document-idle // @inject-into page // @sandbox DOM // @connect naurok.com.ua // @icon https://play-lh.googleusercontent.com/scIkpmsUJTfDbV39X0rb-AvxbgxOrpa9zIGJQqDHP1VbuBTmortXomSSWVZnpErwyA=w480-h960 // ==/UserScript== "use strict"; let session_info; async function loadSessionInfo() { //Get session ID const session_id = document.querySelector(`[ng-app="testik"]`).getAttribute("ng-init").match(/[0-9]+/g)[1]; console.log("Session id: ", session_id); //Get session info from API session_info = await fetch(`https://naurok.com.ua/api2/test/sessions/${session_id}`, { credentials: "include", headers: { 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json' }, redirect: 'follow', }).then(x => x.json()); console.log("Session info: ", session_info); } function displayUi() { //Add test name to the page const testContainer = document.querySelector('.test-container') const infoNode = document.createElement("div"); infoNode.classList.add("x-test-info"); testContainer.insertBefore(infoNode, testContainer.firstChild); const nameNode = document.createElement("div"); nameNode.classList.add("x-test-name"); infoNode.append(nameNode); nameNode.textContent = `${session_info.settings.name}`; const buttonsNode = document.createElement("div"); buttonsNode.classList.add("x-button-container"); infoNode.append(buttonsNode); let xButton xButton = document.createElement("a"); buttonsNode.append(xButton); xButton.classList.add("x-button"); xButton.textContent = "Результати інших учнів"; xButton.href = `https://naurok.com.ua/test/homework/${session_info.settings.id}/detailed-export/score`; xButton = document.createElement("a"); buttonsNode.append(xButton); xButton.classList.add("x-button"); xButton.textContent = "Наступні питання"; xButton.href = `javascript:alert("TODO")`; } function applyStyles() { let styleCss = ` /* allow selection */ * { -webkit-user-select: unset !important; -webkit-touch-callout: unset !important; -moz-user-select: unset !important; -ms-user-select: unset !important; user-select: unset !important; } /* style our own ui */ .test-container { display: flex !important; flex-direction: row !important; } .test-container > :last-child { flex-grow: 1 !important; } .x-test-info { background: white; border-radius: 1rem; max-width: 20vw; min-width: 200px; margin: 1rem; padding: 1rem; box-shadow: 0 0 .5rem rgba(0,0,0,.5); overflow: hidden; position: absolute; z-index: 999; height: 100%; transition: transform 1s, opacity .5s; transform: translateZ(1px); } .x-test-info:not(:hover) { transform: rotate(5deg) translateX(-100%) translateX(-10px) scaleY(.95) skewX(-1deg) skewY(-1deg) translateZ(1px); opacity: .6; } .dyslexia .x-test-info { background: #fafac8; } .x-test-name { margin: -1rem; margin-bottom: 1rem; padding: 1rem; background: #40596b; color: white; } .dyslexia .x-test-name { background: #dadaa8; color: black; } .x-button-container { display: flex; flex-direction: column; gap: .5rem; } .x-button { display: block; appearance: button; text-decoration: none; text-align: center; background-color: #f7cdcd; padding: 1rem 2rem; color: black; border-radius: .33rem; font-size: 1.5rem; } .x-button:hover { text-decoration: inherit; color: inherit; } .dyslexia .x-button { background: #dadaa8; } `; //use layer if possible on newer browsers to override important styleCss = ` ${ styleCss } @layer { ${styleCss} } `; //add css to page, using GM_addStyle if possible if (window.GM_addStyle) { window.GM_addStyle(styleCss); } else { const styleElement = document.createElement("style"); styleElement.innerHTML = styleCss; document.querySelector("head").append(styleElement); } } async function main() { applyStyles(); loadSessionInfo().then(() => { displayUi(); }); } main();