我想用Greasemonkey自动回答问题。我有问题和答案,但如何选择它们?
这是HTML:
<div class="vito_form_q">
<div class="vito_form_title_min_no">
<span id="ContentPlaceHolder1_lblquestionNo">8</span>
</div>
<div class="vito_form_title_min">
<span id="ContentPlaceHolder1_lblquestion">Which sport is not playing with the ball?</span>
</div>
<div class="clearfloat"></div>
<div class="meter orange nostripes"><span style="width: 100%"></span></div>
<div class="quest">
<table id="rbAnswer" class="q1">
<tr><td>
<input id="rbAnswer_0" type="radio" name="ctl00$ContentPlaceHolder1$rbAnswer" value="157"/><label for="rbAnswer_0">Handball</label>
</td></tr>
<tr><td>
<input id="rbAnswer_1" type="radio" name="ctl00$ContentPlaceHolder1$rbAnswer" value="158"/><label for="rbAnswer_1">Basketball</label>
</td></tr>
<tr><td>
<input id="rbAnswer_2" type="radio" name="ctl00$ContentPlaceHolder1$rbAnswer" value="159"/><label for="rbAnswer_2">Football</label>
</td></tr>
<tr><td>
<input id="rbAnswer_3" type="radio" name="ctl00$ContentPlaceHolder1$rbAnswer" value="160"/><label for="rbAnswer_3">Fencing</label>
</td></tr>
例如,对于这个问题:
<span id="ContentPlaceHolder1_lblquestion">Which sport is not playing with the ball?</span>
选择答案:
<td>
<input id="rbAnswer_3" type="radio" name="ctl00$ContentPlaceHolder1$rbAnswer" value="160" />
<label for="rbAnswer_3">Fencing</label>
如何使用Greasemonkey执行此操作?
答案 0 :(得分:1)
制作一系列问题和答案,如下:
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.
];
然后将此行添加到Greasemonkey脚本的the Metadata Block:
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
然后,使用jQuery的强大功能,您的脚本可以使用以下代码检查正确的单选按钮:
(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;
}