搞了個自動競賽做題的神器-:---------僅此紀念(核心代碼,歡迎轉載,保留鏈接,感激不盡)


最終版部分



搞了個自動競賽做題的神器【智能答題機靈】---------僅此紀念,【自動做卷,智能答題】:

功能:

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);
            }
        }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章