nbsp;
else if (stage >= 3) then
begin
if (isRun) then
begin
TryAgain;
stage := stage +1;
end;
end
end;
第一步后,会弹出一个对话框,确定后才进入第二步,因为只有一次,这里没有处理,由手工点击确定。
第二步比较简单,一个协议条款,直接模拟点击“同意”按钮,进入第三步。
第三步是关键步骤,因为报名信息都在这里填,并提交。首先用读入的XML中的数据填第二个表单,然后提交表单。并启动一个定时器,定时提交表单重复尝试报名。
表格 4
定时器重复报名:
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
doc: ihtmldocument2;
placeSelect:IHTMLSelectElement;
pwd1Input:IHTMLInputElement;
begin
TryAgain;
Application.ProcessMessages;
end;
每次报名希望重试不同的考点,以扩大选择的范围,因此重复时轮流用选择的几个考点报名:
表格 5
procedure TfrmMain.TryAgain;
var
doc: ihtmldocument2;
placeSelect:IHTMLSelectElement;
pwd1Input:IHTMLInputElement;
kk:hwnd;
begin
if (webbrowser1.LocationURL = url3) then
begin
doc:=(WebBrowser1.Document as IHTMLDocument2);
placeSelect := (doc.all.item(''''tp_cname'''',0) as IHTMLSelectElement) ;
placeSelect.selectedIndex := placesID[(times mod placeNum) + 1]; //轮流换考点
pwd1Input := (doc.all.item(''''pwd1'''',0) as IHTMLInputElement) ;
pwd1Input.value := pwd;
submitForm;
times := times + 1;
statusBar1.Panels[0].Text := ''''正在第'''' + inttostr(times) + ''''次报名。。。'''';
Application.ProcessMessages;
end
else //报名成功,报名成功,我也不知道成功是什么样子,只好根据页面地址判断
begin
timer1.Enabled := false;
btnReg.Caption := ''''开始'''';
isRun := false;
statusBar1.Panels[0].Text := ''''报名已成功。。。'''';
showmessage(''''报名成功!!!!!!!!!!!!'''');
end;
end;
在重复报名中遇到一个问题:报名不成功会弹出一个对话框,然后页面阻塞在那里,无法进行下去。没有办法,只有再起一个进程,找到IE弹出的对话框,强行关掉。(其实关掉并不是最好的办法,如果能发送一个消息点击确定按钮最好,可惜没找到相关资料)。
表格 6
procedure TfrmMain.NewThread;
var
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
上一页 [1] [2] [3] [4] 下一页 没有相关教程
|