愚人節那天學校 校內論壇搞了個論壇簽到活動,在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" id="todaysay" value="Hello World!" /> <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,卡密到手,免費上一個月的校園網。