首页
社区
课程
招聘
[旧帖] [原创]看雪安全论坛小测试自动答题工具(脚本) 0.00雪花
发表于: 2012-10-26 23:25 2169

[旧帖] [原创]看雪安全论坛小测试自动答题工具(脚本) 0.00雪花

2012-10-26 23:25
2169
首先希望大家还是认真去做题, 题目本身不多嘛.

自己写这个工具完全是娱乐性质, 如果有什么不妥, 请摊主火速删之, 造成什么不好的影响, 实在抱歉, 请大家多多怕转!

打开答题页面运行脚本


答题完毕显示所有题目和正确答案


下载脚本
pediyAnswer.js.txt

/**
 * 看雪安全论坛小测试自动答题工具(脚本)
 * 论坛小测试(可以赚取30 Kx): http://bbs.pediy.com/answer.php
 * 
 * 主要是利用题目/答案不会变(只是出现位置会随机改变), 提交答案可以从中得知回答是否正确.
 * 例如:
 * 你尝试回答[题目1], 选择[答案1], 其他题目都选择[答案1].
 * 提交答案, 会被告知"您有13道问题回答错误".
 * 那么我们重新选择[题目1]为[答案2], 其他题目仍旧都选择[答案1].
 * 再次提交, 如果被告知"您有12道问题回答错误", 那就是说[答案2]就是[题目1]的正确答案了!
 * 
 * 使用方法:
 * 1. 需要firefox/firebug
 * 2. 登录看雪论坛, 打开论坛小测试页面, http://bbs.pediy.com/answer.php
 * 3. F12打开firebug Console, 如果Console Panel is disabled, 请先Enabled
 * 4. 将脚本代码复制到Console中, Run!
 * 5. 答题完毕后会显示所有题目和正确答案, 再会跳转到社区银行(用户必须激活才能查看)
 * 
 * @author ufologist
 * @version 1.0 2012-10-26
 */
(function() {
    function getAnswerRadioEls() {
        var radioEls = [];
        var inputEls = document.getElementById('answerForm').getElementsByTagName('input');
        for (var i = 0, length = inputEls.length; i < length; i++) {
            var inputEl = inputEls[i];
            if (inputEl.type === 'radio') {
                radioEls.push(inputEl);
            }
        }
        return radioEls;
    }

    function findAnswerRadioEls(radioEls, radioName) {
        var answerRadioEls = [];
        for (var i = 0, length = radioEls.length; i < length; i++) {
            var radioEl = radioEls[i];
            if (radioEl.name === radioName) {
                answerRadioEls.push(radioEl);
            }
        }
        return answerRadioEls;
    }

    function getRadioName(index) {
        return 'question[question' + index + ']';
    }

    function submitAnswer() {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'http://bbs.pediy.com/answer.php?action=submit', false);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(encodeURI(getFormData().join('&')));

        if (xhr.status == 200) {
            return getWrongCount(xhr.responseText);
        } else {
            // HTTP异常时重试
            return submitAnswer();
        }
    }

    function getWrongCount(text) {
        // '<p><strong>您有13道问题回答错误!</strong></p>'
        var getWrongCountRegExp = /您有(\d+)道问题回答错误!/m;
        // <p><strong>恭喜您,问题全部回答正确,您获得了30Kx!正在转向论坛首页...</strong></p>
        var getSuccessRegExp = /恭喜您/m;
        // <p><strong>对不起,您已经参加了这次答题活动!</strong></p>
        var hasJoinedRegExp = /对不起/m

        if (getWrongCountRegExp.test(text)) {
            return parseInt(getWrongCountRegExp.exec(text)[1]);
        } else if (getSuccessRegExp.test(text)) { // 问题全部回答正确
            return 0;
        } else if (hasJoinedRegExp.test(text)) { // 已经参考过答题活动了
            return 0;
        } else {
            return 0;
        }
    }

    function getFormData() {
        var inputEls = document.getElementById('answerForm').getElementsByTagName('input');
        var data = ['action=submit'];
        for (var i = 0, length = inputEls.length; i < length; i++) {
            var inputEl = inputEls[i];
            if (inputEl.checked) {
                data.push(inputEl.name + '=' + inputEl.value);
            }
        }
        return data;
    }

    function defaultCheckAnswer(radioEls, startQuestionIndex, questionCount) {
        for (var i = startQuestionIndex; i <= questionCount; i++) {
            var answerRadioEls = findAnswerRadioEls(radioEls, getRadioName(i));
            answerRadioEls[0].checked = true;
        }
    }

    function tryAnswerQuestion(radioEls, index) {
        var answerRadioEls = findAnswerRadioEls(radioEls, getRadioName(index));

        var answer1WrongCount;
        var rightAnswerIndex;
        for (var i = 0, length = answerRadioEls.length; i < length; i++) {
            answerRadioEls[i].checked = true;
            var wrongCount = submitAnswer();
            // 全部回答正确了
            if (wrongCount === 0) {
                return;
            }

            if (i == 0) { // 选择答案1时, 提示有多少道问题回答错误, 有可能答案1就是正确答案
                answer1WrongCount = wrongCount;
                rightAnswerIndex = 0;
            } else if (wrongCount < answer1WrongCount) { // 如果错误数量减小了, 则说明这个答案就是对的
                rightAnswerIndex = i;
                break;
            }
        }

        // 重新选中正确答案
        answerRadioEls[rightAnswerIndex].checked = true;
    }

    function showAnswers(radioEls, startQuestionIndex, questionCount) {
        var questionAnswers = [];
        for (var i = startQuestionIndex; i <= questionCount; i++) {
            var answerRadioEls = findAnswerRadioEls(radioEls, getRadioName(i));
            for (var j = 0, length = answerRadioEls.length; j < length; j++) {
                var answerRadioEl = answerRadioEls[j];
                if (answerRadioEl.checked) {
                    var question = answerRadioEl.parentNode.parentNode.parentNode.previousSibling.textContent
                    var answer = answerRadioEl.parentNode.textContent;
                    questionAnswers.push(question + '\n' + answer);
                }
            }
        }
        alert(questionAnswers.join('\n\n'));
    }

    function main() {
        var startQuestionIndex = 1;
        var questionCount = 16;
        var radioEls = getAnswerRadioEls();
        defaultCheckAnswer(radioEls, startQuestionIndex, questionCount);

        // 逐个尝试各个问题的各个答案来确定正确答案
        for (var i = startQuestionIndex; i <= questionCount; i++) {
            tryAnswerQuestion(radioEls, i);
        }

        showAnswers(radioEls, startQuestionIndex, questionCount);
        alert('跳转到社区银行查看资产');
        window.location.href = 'http://bbs.pediy.com/bank.php';
    }

    main();
})();

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 438
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个很有意思,谢谢分享!!!
2012-10-26 23:26
0
雪    币: 446
活跃值: (186)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
的确很有意思
2012-10-27 10:57
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主写的很详细,先慢慢学习了。辛苦了。
2012-10-28 22:10
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主的js功底不错啊
2012-10-30 10:43
0
游客
登录 | 注册 方可回帖
返回
//