0

I am trying to write a script in Grease/Tampermonkey which will search a webpage for an question, and then fill in the textbox with the correct answer.

This is what I've come up with so far:

//There are 12 options in each array

var questions = ["fourth letter", "grass", "6x4", "NFL team", "OSU Buckeys", "35 + 15", "Yellow + Blue", "LeBron James", "Lassie", "2x9", "9x10"];
var answers = ["s", "green", "nut", 24, "Bengals", "gray", 50, "green", 23, "dog", 18, 90];
var answer = 0;
var position = 0;
var found = false;

//When the window loads, the function will trigger the While loop, which will run as long as found is false. 
//The While loop triggers the For loop, which runs until the If statement has found the question. 
//The For loop will run a number of times equal to the number of variables in the questions array. 
//The if statement searches the webpage for each consecutive variable in the questions array until it finds a match. 
//When the if statement finds a match, it notes which variable in the questions array matched, and sets found to true which should trigger the end of the while loop.

window.onload = function () {
    while (found) {
        for (var i = 0;i<=questions.length;i++) {
            if (document.body.innerHTML.toString().indexOf(questions[i])) > -1 {
                position = i;
                found = true;
            } else {
                console.log ("No answer was found");
            };
        };
    };
};

//Once the While loop has completed, this fills the textbox on the webpage with the answer
document.getElementById("humanverify\[input\]").innerHTML = answers[position];

Tampermonkey indicates that the code is running. However, the textbox isn't filling. I am new to Javascript, and have been piecing together bits of code and knowledge over the last week.

2 Answers2

3

found is false initially hence the while loop will never executed.

try this

var questions = ["fourth letter", "grass", "6x4", "NFL team", "OSU Buckeys", "35 + 15", "Yellow + Blue", "LeBron James", "Lassie", "2x9", "9x10"];
var answers = ["s", "green", "nut", 24, "Bengals", "gray", 50, "green", 23, "dog", 18, 90];
var answer = 0;
var position = 0;
var found = false;
    window.onload = function () {
        for (var i = 0;i<=questions.length;i++) {
            if (document.body.innerHTML.toString().indexOf(questions[i]) > -1) {
                position = i;
                found = true;
                break;
            }
        }
        if(found){
            document.getElementById("humanverify\[input\]").innerHTML = answers[position];
        }
        else{
            console.log ("No answer was found");
        }
    }
Nitin9791
  • 1,124
  • 1
  • 14
  • 17
0

I've been fiddling with it all day, and came up with a functional result that satisfies all my needs. Here is the result:

var answers = ["s", "green", "nut", 24, "bengals", "gray", 50, "green", 23, "dog", 18, 90];
var questions = ['The fourth letter in the word "Reds" is?','What color is grass?','A buckeye is a what?',"What's 6x4?",'The NFL team in Cincinnati is called the?','The OSU Buckeys are Scarlet and?','35 + 15 is?','Yellow + Blue is?','LeBron James wears #?','Lassie was a what?','2x9 is what?',"What's 9x10?"];
var question = document.getElementsByClassName('description')[0].innerText;
var found = 0;
var answer = 0;

//browses questions variable for match to question variable, then assigns the correlating index to found, and assigns the answer to the answer variable, as pulled from the answers variable
for (var find = 0; find <= questions.length; find++) {
    if (question === questions[find]) {
        found = find;
        answer = answers[found];
    }
}

//checks the assigned radio, fills the textbox with the answer, and clicks the Vote button
var submit = function (){
    document.getElementsByName('polloptionid')[3].checked = true;
    document.getElementById("humanverify").value = answer;
    document.getElementsByName("vote")[0].click();
}

submit();

//allows for a slight delay so that the page can load before cycling through script again
var reload = function () {
    location.reload();
}

setTimeout(reload, 3000);