您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a button that automatically gets 100% on a Write That Essay quiz
// ==UserScript== // @name Write That Essay quiz completer // @description Add a button that automatically gets 100% on a Write That Essay quiz // @include https://www.writethatessay.org/wte/learning-journey/stage/*/quiz // @run-at document-idle // @license MIT // @version 0.0.1.20221207102327 // @namespace https://greasyfork.org/users/993871 // ==/UserScript== /*===== CONFIG =====*/ let incorrectColor = "rgb(237, 28, 36)" let correctColor = "rgb(86, 224, 0)" let checkFrequency = 20 /*==================*/ //Define let answers = {} let questionbindings = {} let labels const waitUntil = (condition) => { return new Promise((resolve) => { let interval = setInterval(() => { if (!condition()) { return } clearInterval(interval) resolve() }, checkFrequency) }) } (async function() { while (true) { await waitUntil(() => (document.getElementsByClassName("css-e973uh")[0] != null && document.getElementsByClassName("custom_flex")[0] == null)) let flex = document.createElement("div") flex.className = "custom_flex" flex.style = ` display: flex; flex-direction: row; margin-bottom: 0px; margin-left: auto; margin-right: auto; magin-top: 0px; width: 100%; align-items: center; ` document.getElementsByClassName("intro")[0].appendChild(flex) flex.appendChild(document.getElementsByClassName("start-button")[0]) let btn = document.createElement("button") btn.innerText = "Auto" btn.onclick = main btn.className = "auto-button css-p4hiy8" document.getElementsByClassName("start-button")[0].style.marginRight = "0px" btn.style.marginLeft = "10px" btn.style.marginRight = "auto" document.getElementsByClassName("custom_flex")[0].appendChild(btn) } })() //Wrap inside async async function main() { //Repeat the quiz for(var z = 0; z < 30; z++){ let guesses = [] let questions = [] //Start quiz document.getElementsByClassName("start-button")[0].click() await waitUntil(() => (document.getElementsByClassName("css-alz08e")[0] != null)) //Repeat for each question for(var i = 0; i < 10; i++){ let ans = document.getElementsByClassName("answers")[0] let buttons = ans.childNodes //Get labels of each question labels = [] for(var j = 0; j < buttons.length; j++){ labels[j] = buttons[j].childNodes[1].childNodes[0].innerHTML } //Get title let question = document.getElementsByClassName("question-text")[0].innerText questions.push(question) //Check if there is a known answer for the current question if (!(answers.hasOwnProperty(question))) { //If no known answer, guess if (z == 0) { var selNum = 0 } else {//.. for(var k=0;k<labels.length;k++){ if(labels[k] == questionbindings[question][z]){ var selNum = k break; } } } } else { //If the answer is known, select the answer for(var k=0;k<labels.length;k++){ if(labels[k] == answers[question]){ var selNum = k break } } } guesses.push(labels[selNum]) //Click the button that is guessed or known buttons[selNum].click() if (z == 0) { //Bind answers if first loop for(var g = 0; g < labels.length; g++){ questionbindings[question] = labels } } //Click next question button document.getElementsByClassName("css-1eo8gmz")[0].click() } //Wait for results to appear await waitUntil(() => (document.getElementsByClassName("css-yf25u6")[0] != null)) //Read results let results = document.getElementsByClassName("tick-or-cross") for(var r = 0; r < results.length; r++){ if (window.getComputedStyle(results[r], null).getPropertyValue("background-color") == correctColor) { answers[questions[r]] = guesses[r] } } //Stop if all questions are correct if (Object.keys(answers).length >= 10) { break } //Accept results document.getElementsByClassName("css-1eo8gmz")[0].click() await waitUntil(() => (document.getElementsByClassName("start-button")[0] != null)) } }