zerodytrash / Google-Forms-Quiz-Solver

This script tries to extract answer conditions from Google Forms and solve them.
58 stars 17 forks source link

How to use this program? #1

Open AlifBrahim opened 3 years ago

AlifBrahim commented 3 years ago

Hi developer. I had already installed your program on Tampermonkey. So, how to run it? Thank you. Regards, Alif

zerodytrash commented 3 years ago

hi,

If you visit a Google form that expects exact values, the script will ask you if you want to pre-fill them. Example Form: https://docs.google.com/forms/d/e/1FAIpQLSf1jIkFvckXSRmtWCZORzOQcQft846fEFMHj2tFDtmNBASyuQ/viewform

2021-04-10 16_51_32

If this does not happen, check if the script is activated. 2021-04-10 16_51_46

JustinGuestX6YT commented 2 years ago

it didn't work

CreateFor commented 2 years ago

here use this script

// ==UserScript== // @name Google Forms Quiz Solver // @namespace https://zerody.one // @version 0.2 // @description This script tries to extract exact answer conditions from Google Forms and solve them // @author ZerodyOne (https://github.com/zerodytrash/) // @match https://docs.google.com/forms/* // @grant none // @run-at document-end // ==/UserScript==

(function() { 'use strict';

// skip form if already filled by url params
if(location.href.indexOf("?entry.") > 0) return;

var inputAreas = document.querySelectorAll("div[data-params]");
var urlPrefillParams = new URLSearchParams();

inputAreas.forEach((inputArea) => {
    try {

        var areaParams = inputArea.getAttribute("data-params");
        var decodedAreaParams = JSON.parse("[" + areaParams.substr(areaParams.indexOf("["), areaParams.length));
        var questionParams = decodedAreaParams[0][4][0];
        var questionEntryId = questionParams[0];
        var validationParams = questionParams[4];

        // if validation disabled
        if(validationParams.length === 0) return;

        var validationRule = validationParams[0];
        var valueToFill = null;

        // type: number && match: equal to
        if(validationRule[0] === 1 && validationRule[1] === 5) {
            valueToFill = validationRule[2][0];
        }

        // type: text && match: contains
        if(validationRule[0] === 2 && validationRule[1] === 100) {
            valueToFill = validationRule[2][0];
        }

        if(valueToFill !== null) urlPrefillParams.set("entry." + questionEntryId, valueToFill);

    } catch(ex) {
        console.error("Param decoding failed", ex, inputArea);
    }
});

if(Array.from(urlPrefillParams).length > 0) {
    if(confirm("Found " + Array.from(urlPrefillParams).length + " exact values in form validation. Prefill form?")) {
        location.search = urlPrefillParams;
    }
}

})();