delphi实现discuz论坛自动签到功能

愚人节那天学校 校内论坛搞了个论坛签到活动,在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&amp;module=sign&amp;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" id="todaysay" value="Hello World!" />
<input type="submit" name="card" value="#提交#" style="height:200px; 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次签到的卡密没了。

界面:

30726

版主发给我的信息:

QQ截图20120519232217_副本版主以为我故意发了个伪帖,其实是程序提交太快造成的,可爱的版主我错了,哈哈。

OK,卡密到手,免费上一个月的校园网。

原文地址:https://www.cnblogs.com/fjut/p/2509307.html