How can I automatically select specific radio buttons with Greasemonkey?

一曲冷凌霜 提交于 2019-11-28 11:49:31

Make an array of questions and answers, like so:

var answerKey   = [
      { q: "sport is not playing with the ball", a: "Fencing" }
    , { q: "Best SciFi franchise",               a: "Star Trek" }
    , { q: "Most badass monster",                a: "Bun-Bun" }
    , { q: "Most toxic chemical in this list",   a: "Mountain Dew" }
    // etc.
];


Then add this line to the Metadata Block of your Greasemonkey script:

// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js


Then, using the awesome power of jQuery, your script can check the right radio buttons with the following code:

(See a demo of the underlying code at jsFiddle.)

var answerKey   = [
      { q: "sport is not playing with the ball", a: "Fencing" }
    , { q: "Best SciFi franchise", a: "Star Trek" }
    , { q: "Most badass monster", a: "Bun-Bun" }
    , { q: "Most toxic chemical in this list", a: "Mountain Dew" }
    // etc.
];

//--- Loop through the question(s) on the page and answer then if possible.
var questionTxt = $("div div.vito_form_title_min span[id$='question']");

questionTxt.each ( function () {
    var bFoundAnswer    = false;
    var answerTxt       = getAnswer (this.textContent);
    if (answerTxt) {
        //--- We have the answer text, now find the matching radio button and select it.
        var ansForThisQ     = $(this).parent (). nextAll ("div.quest").find ("label");

        ansForThisQ.each ( function () {
            var zRegExp     = new RegExp (answerTxt, 'i');
            if (zRegExp.test (this.textContent) ) {
                bFoundAnswer    = true;
                var label       = $(this);
                var radioButt   = $("#" + label.prop ("for") );
                radioButt.prop  ("checked", "checked");
                label.css       ("background", "lime");
                return false;   // End loop
            }
        } );
    }
    else {
        alert ("I don't know how to answer: '" + this.textContent + "'");
        $(this).css ("background", "pink");
    }
    if ( answerTxt  &&  ! bFoundAnswer) {
        alert ("The page does not have the specified answer for the question: '" + this.textContent + "'");
        $(this).css ("background", "pink");
    }
} );

function getAnswer (questionText) {
    for (var J = answerKey.length - 1;  J >= 0;  --J) {
        var zRegExp = new RegExp (answerKey[J].q, 'i');

        if (zRegExp.test (questionText) )
            return answerKey[J].a;
    }
    return null;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!