最终版部分图
搞了个自动竞赛做题的神器【智能答题机灵】---------仅此纪念,【自动做卷,智能答题】:
功能:
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);
}
}