搞了个自动竞赛做题的神器-:---------仅此纪念(核心代码,欢迎转载,保留链接,感激不尽)


最终版部分



搞了个自动竞赛做题的神器【智能答题机灵】---------仅此纪念,【自动做卷,智能答题】:

功能:

1.自动请求试卷,自动回答题目【可以规定每天自动做的试卷份数】

2.手动设置作对题目的范围【更加真实可信,不然每次100分,肯定惊为天人了,20110620被官方监测发现,更改了验证机制。。。杯具】

3.随机延时交卷【尽可能打乱规律,无法监测到】

4.其他的就不说了......总之想答多少分就多少分,名次也就自在掌握之中.......【20110620杯具了】

 哥是个遵守规则的人,可哥却总是有意无意地破坏规则.......纠结......相当的纠结

秒杀器,妙答器,做题器

 只能虚心学习了。。。。

一段辉煌已经过去,仅此纪念....

20110622 再次神起,优化各种操作,性能,现在基本上无懈可击,个人感觉非常满意,因此谓之神器。

一开始用的是软件组合数据,通过httpwebrequest底层提交等,后来发现官方在监视(官方会偷偷更改post数据进行监视,这样每天都要抓包分析,很麻烦),变化厉害,像这个问题,其实追求的不是速度与技术,而是保证两点:

1,得分率(关键在于答案库,答案库有两种方法,一,如果官方有反馈,很好,直接用,二,如果没有标准答案,生成集中库,已出现最高频率的答案为准)

2,真实度(完全模拟手工,配以随机延时,直接页面操作,能以不变应万变)

于是改用页面应用操作,一切完全模拟手工,体验了把sqlite。。。。咿呀咿呀哟

核心代码如下:

试卷试题代码摘要

<table id="testContain_1" width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td class="question"><span id="testQuery_1">1、【判断】工伤保险基金按伤残等级支付一次性伤残补助金,四级伤残为21个月的本人工资。</span>
<img title='错题报告' src='../../../resource/skin/theme1/common/t_noalert.gif' border='0' style='cursor: hand;' οnclick='ShowReportError("1","-2010244715")' />  <a href='http://61.183.15.250:81/xxzl1_2_6.htm' target="_blank"><img title='帮助' src='../../../resource/skin/theme1/common/t_help.gif' border="0" /></a></td></tr><tr><td class="questionOption"><input id="rbtnOption_1_0" class="radioControl" value="A" type="Radio" name="rbtnOption_1" /><label for='rbtnOption_1_0'>A.正确</label></td></tr><tr><td class="questionOption"><input id="rbtnOption_1_1" class="radioControl" value="B" type="Radio" name="rbtnOption_1" /><label for='rbtnOption_1_1'>B.错误</label></td></tr><tr><td style='height:8px'><div id='testKey_1' class='testKey'></div><input id="testID_1" type="text" value="-2010244715" style="display:none" /></td></tr></table>
智能答题核心代码:

private void zdhd()//模拟手工填写答案by /http://blog.csdn.net/wyw308
        {
            try
            {
                Stopwatch sw = new Stopwatch();//时间监视by /http://blog.csdn.net/wyw308
                sw.Start();
                
                WriMsg("开始答卷....");//通用事件记录by /http://blog.csdn.net/wyw308

                tm_id = "";
                DoNum = 0;

                string[] RandAns ={ "A", "B" };//如果没有答案,随机填by /http://blog.csdn.net/wyw308
                string daan = "";
                int a_num = 0, da_num = 0;//做题数,查找的答案数by /http://blog.csdn.net/wyw308
                DMK d = new DMK();
                progressBar2.Maximum = 50;//进度条by /http://blog.csdn.net/wyw308
                progressBar2.Minimum = 0;
                for (int i = 1; i <= 50; i++)//循环次数,即题目数
                {
                    progressBar2.Value = i;
                    string tc = "testContain_" + i;
                    string tk = "testKey_" + i;
                    string ti = "testID_" + i;
                    //string tq="testQuery_" + i;//每题的题目详细by /http://blog.csdn.net/wyw308
                    HtmlElement testContain = webBrowser1.Document.Window.Frames["RightFrame"].Document.GetElementById(tc);    //试题Table容器by /http://blog.csdn.net/wyw308
                    HtmlElement testKey = webBrowser1.Document.Window.Frames["RightFrame"].Document.GetElementById(tk);          //试题答案控件by /http://blog.csdn.net/wyw308
                    HtmlElement testID = webBrowser1.Document.Window.Frames["RightFrame"].Document.GetElementById(ti);            //试题控件by /http://blog.csdn.net/wyw308

                    if (testContain != null && testKey != null && testID != null)
                    {
                        if (da_num >= int.Parse(txt_nopass.Text.Trim()))//限制正确答案数,不超过多少题,即限制最高得分by /http://blog.csdn.net/wyw308
                            daan = "";
                        else
                            daan = d.GetAnser(testID.GetAttribute("value"));//得到正确答案by /http://blog.csdn.net/wyw308,此方法略

                        if (daan == "")//余下的手工做
                        {
                            if (!ckb_sg.Checked)//如果不手工做,随机填充by /http://blog.csdn.net/wyw308
                            {
                                Random r = new Random();
                                daan = RandAns[r.Next(0, 2)];
                            }
                           tm_id = tm_id + "|" + i.ToString();
                        }
                        else
                            da_num = da_num + 1;

                        HtmlElementCollection inputs = testContain.GetElementsByTagName("input");//开始模拟手工做题by /http://blog.csdn.net/wyw308
                        foreach (HtmlElement ipt in inputs)
                        {
                            if (daan.Contains(ipt.GetAttribute("value")))
                            {
                                ipt.SetAttribute("checked", "true");
                                //ipt.Parent.InnerText//每题显示的详细答案
                            }

                        }
                        a_num = a_num + 1;
                    }
                    else
                    {
                        tm_id = tm_id + "|" + i.ToString();
                        //这里没有做题
                    }
                }
                DoNum = a_num;
                string msg = "";
                if (DoNum == 0)
                {
                    msg = "注意:一题没做,请检查是不是试卷界面";
                }
                else
                {
                    msg = "答卷完毕....试题" + a_num.ToString() + ",做" + da_num.ToString();
                    if (ckb_sg.Checked)
                        msg = msg + "," + (a_num - da_num).ToString() + "题没做" + tm_id;
                    else
                        msg = msg + "," + (a_num - da_num).ToString() + "题随机做" + tm_id;
                }
                sw.Stop();
                string str_hs = "[";
                if (sw.Elapsed.Minutes > 0)
                    str_hs = str_hs + sw.Elapsed.Minutes.ToString() + "分";
                if (sw.Elapsed.Seconds > 0)
                    str_hs = str_hs + sw.Elapsed.Seconds.ToString() + "秒";
                if (sw.Elapsed.Milliseconds > 0)
                    str_hs = str_hs + sw.Elapsed.Milliseconds.ToString() + "毫秒]";
                WriMsg(msg+str_hs);
              
                progressBar2.Value = 0;
            }
            catch (Exception err)
            {
                WriMsg(err.Message);
            }
        }



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值