Automatic_answer_Tampermonkey_script
All comments indicating // need modify need to be changed. hint: You can use LLM to get answer and then use this script to answer questions automaticly.>_< json format example : [ { "title": "this is question A", "answer": "false" }, { "title": "this is question B", "answer": "A" } ] // ==UserScript== // @name Automatic_answer_Tampermonkey_script // @namespace http://tampermonkey.net/ // @version 0.1 // @description read JSON file,Automatic_answer // @author you // @match https://example.com/* // need modify // @grant none // ==/UserScript== (function() { 'use strict'; function addControlPanel() { const panel = document.createElement('div'); panel.style.position = 'fixed'; panel.style.top = '10px'; panel.style.right = '10px'; panel.style.zIndex = '999999'; panel.style.background = 'rgba(0,0,0,0.7)'; panel.style.color = '#fff'; panel.style.padding = '10px'; panel.style.borderRadius = '6px'; panel.style.fontSize = '12px'; const fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = 'application/json'; fileInput.style.marginBottom = '5px'; fileInput.style.display = 'block'; const btn = document.createElement('button'); btn.textContent = 'Automatic answer'; btn.style.display = 'block'; btn.style.width = '100%'; btn.style.cursor = 'pointer'; panel.appendChild(fileInput); panel.appendChild(btn); document.body.appendChild(panel); let qaList = null; // Read JSON fileInput.addEventListener('change', function(e) { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function() { try { qaList = JSON.parse(reader.result); alert('The answer JSON was loaded successfully, totaling ' + qaList.length + ' questions.'); } catch (err) { console.error(err); alert('JSON parsing failed. Please check if the format is [ {"title":..., "answer":...}, ... '); } }; reader.readAsText(file, 'utf-8'); }); // Click on [Auto Answer] btn.addEventListener('click', function() { if (!qaList) { alert('Please select a JSON file first!'); return; } autoAnswer(qaList); }); } function autoAnswer(qaList) { const questionNodes = document.querySelectorAll('.m-item'); let matchedCount = 0; qaList.forEach(item => { const titleKeyword = String(item.title || '').trim(); const answerKeyword = String(item.answer || '').trim(); if (!titleKeyword || !answerKeyword) return; questionNodes.forEach(qNode => { // The question stem is in .subject-title.examTitle const titleNode = qNode.querySelector('.subject-title.examTitle'); // need modify if (!titleNode) return; const titleText = titleNode.innerText.trim(); // Use "contains" to match questions (not requiring exact consistency, so you can fill in only a part). if (!titleText.includes(titleKeyword)) return; // Options: under .select-box, label .ivu-radio-wrapper const optionLabels = qNode.querySelectorAll('.select-box .ivu-radio-wrapper'); // need modify let clicked = false; optionLabels.forEach(label => { if (clicked) return; const optionText = label.innerText.trim(); const input = label.querySelector('input.ivu-radio-input'); // need modify if (!input) return; // Matching method: // 1. Option text contains answer keywords (e.g., "True" or "False") // 2. Compatible with A./A format if ( optionText.includes(answerKeyword) || // Content contains optionText.startsWith(answerKeyword + '.') || // A. xxx optionText.startsWith(answerKeyword + '、') || // A、xxx optionText.startsWith(answerKeyword + ' ') // A xxx ) { // Prioritize input fields for compatibility with some framework events input.click(); // Click the label again for backup label.click(); clicked = true; matchedCount++; console.log('The title [' + titleKeyword + '] has been selected:' + optionText); } }); }); }); alert('The system will automatically click "Complete," successfully matching and selecting approximately '+ matchedCount+' options.'); } window.addEventListener('load', function() { // Sometimes the questions are rendered asynchronously, so you can wait a little while. setTimeout(addControlPanel, 1500); }); })();