最終版部分圖
搞了個自動競賽做題的神器【智能答題機靈】---------僅此紀念,【自動做卷,智能答題】:
功能:
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);
}
}