愚人节那天学校 校内论坛搞了个论坛签到活动,在4月3号和4号24点整,签到前3名同学送校园网上网卡密一个月(35元)。手工去抢很难抢到,一旦提早提交又要重新选择“心情”或打字,可能这个时候就被别人抢了,而且服务器的时间并不一定和百度上看到的时间一致(通过查看该服务器上的其他站点的时间和百度上看到的并不一致),虽然可以算出差值,但还是有风险,所以手工是很困难的。
思路:本来是想使用IdHTTP模拟提交页面,无奈cookies没模拟成功,那就使用最笨的方法,模拟鼠标指针点击。获取签到页面提交的参数,自己写个提交的页面 sign.html,delphi中的WebBrowser打开sign.html,在23点58分时打开程序,Timer每隔500ms去点击提交按钮,然后WebBrowser重新打开sign.html,一直循环到n次,设置timer的enabled为false ,循环结束。
步骤:
1. 论坛的签到插件是 Sign EverydayVer 7.0.1 Build N0922
2.查看签到页面的源代码,提取出有效的提交参数,并伪造表单,自己重新写个提交页面:
<form name="qiandao" method="post" action="http://XXXX.edu.cn/plugin.php?identifier=sign&module=sign&operation=qiandao">
<input type="hidden" name="action" value="qiandao" />
<input type="radio" name="qdxq" value="kx" checked="checked" />
<input type="radio" name="qdmode" value="1" checked="checked" />
<input type="text" name="todaysay" />
<input type="submit" name="card" value="#提交#" style="height:200px; width:500px;" / >
</form>
保存成 sign.html。 3.delphi 主要实现代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
//打开sign.html,和程序放在同一目录下
WebBrowser1.Navigate('file://' + ExtractFilePath(Application.Exename) + 'sign.html');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
k:=k+1; //k为当前循环的次数
label1.Caption:=floattostr(max-k); //max为循环的总次数
if(k>max) then
begin
timer1.Enabled:=false;
end;
setCursorPos(400,400); //设置鼠标指针位置,定位按钮位置
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //模拟按下
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); //模拟放开
//sleep(100);
//一提交后 WebBrowser1马上打开sign.html ,有人说这样的话提交失败概率很大,但是我两次都抢到了。
WebBrowser1.Navigate('file://' + ExtractFilePath(Application.Exename) + 'sign.html');
end;
4.等到23点58分左右时打开程序,让它自动去提交。
过会打开论坛发现出现了2个签到帖,而且都是我发的。嗯,卡密到手。
第2天签到也一样,抢的人多不仅有多个签到帖,而且在一个签到帖里我发了2个帖。坛友意见很大,所以第2次签到的卡密没了。
界面:
版主发给我的信息:
版主以为我故意发了个伪帖,其实是程序提交太快造成的,可爱的版主我错了,哈哈。
OK,卡密到手,免费上一个月的校园网。
|
请发表评论