This script calculates the marks after you give the captured answers.
// ==UserScript==
// @license MIT
// @name JEE Mains Marks after capturing the answers
// @match https://examinationservices.nic.in/*/KeyChallange/AnswerKey.aspx
// @description This script calculates the marks after you give the captured answers.
// @version 0.0.1.20220804185237
// @namespace https://greasyfork.org/users/941655
// ==/UserScript==
function parseAnswerKey() {
let table = document.querySelector('#ctl00_LoginContent_grAnswerKey.table.table-bordered.table-condensed tbody')
const content = table = table.querySelectorAll('tr:not(tr:nth-child(1))')
correct_answers = {}
for (let row of content) {
let question_id = row.querySelector('span[id$=QuestionNo]').textContent
let answer = row.querySelector('span[id$=Answer]').textContent
correct_answers[question_id] = answer
}
return correct_answers;
}
/**
* @param {{id: string; subject: "Chemistry" | "Physics" | "Maths"; section: "A" | "B"; givenAnswer: string}[]} givenAnswers Description
*/
function calculateMarks(givenAnswers) {
const correctAnswers = parseAnswerKey();
let total = 0;
for (const givenAnswer of givenAnswers) {
if (!givenAnswer.givenAnswer.includes("Not Attempted")) {
if (correctAnswers[givenAnswer.id] === givenAnswer.givenAnswer) total += 4;
else total--;
}
}
alert(`The total marks are ${total}`)
}
const main = () => {
const mapForm = document.createElement("form");
const mapInput = document.createElement("input");
mapInput.type = "text";
mapInput.name = "answers";
mapInput.placeholder = 'Paste captured answers';
const submitBtn = document.createElement("button");
submitBtn.type = 'submit'
submitBtn.innerText = "Get marks"
mapForm.appendChild(mapInput);
mapForm.appendChild(submitBtn);
document.body.prepend(mapForm);
mapForm.onsubmit = e => {
e.preventDefault();
try {
calculateMarks(JSON.parse(mapInput.value));
} catch (e) {
alert(e)
}
}
}
main()