学院首页>网络编程>其它编程>delphi中的web form提交

delphi中的web form提交

作者: 来源: 添加时间:2006-5-24 13:36:05

问题:使用delphi +twebbrowser进行页面访问的时候.如何最后提交填写的表单.

一般应该是很简单的.

procedure websubmit(WB: TWebBrowser; FieldName: string);
var
   I: Integer;
   FormNr, ItemNr : integer;
   TheForm  : Variant;
   o : Olevariant;

begin
//判断是否存在form对象
   if WB.OleObject.Document.All.Tags('FORM').Length = 0 then
   begin
  ShowMessage('Error: no FORM found on page');
  Exit;
   end;

for FormNr := 0 to WB.OleObject.Document.Forms.Length - 1 do
   begin
//取得每一个form对象
  TheForm := WB.OleObject.Document.Forms.Item(FormNr);

for ItemNr := 0 to TheForm.Length - 1 do
begin
try
  //根据form对象中的的元素名确定是否是需要提交的那个按钮
//form对象包括input,select button等
//比如<input type=submit name='aaaa">
   //则name为  aaaa
   if TheForm.Item(ItemNr).Name = FieldName then
   begin
TheForm.Item(ItemNr).CLICK;  //模拟点击
   exit;  
   end;
except
  Break;
end;
  end;
   end;
end;

上面代码看起来很是正确,不过如果用户的按钮或者说button为:
这个样子的.你会发现永远都不会给提交.
为什么因为在msdn帮助中明确说明了上面的那个item不支持input type=image对象的.
那如何才能提交那样的其实很简单改用以下代码.可以简化整个的提交过程

procedure websubmit(WB: TWebBrowser; FieldName: string);
var
   I: Integer;
   FormNr, ItemNr : integer;
   TheForm  : Variant;
   o : Olevariant;

begin
   if WB.OleObject.Document.All.Tags('FORM').Length = 0 then
   begin
  ShowMessage('Error: no FORM found on page');
  Exit;
   end;

try
//提交指定名字的标签
Wb.oleobject.document.all.namedItem(FieldName).click;
except
exit;
end;

end;

如此极大简化了提交同时也满足了所有可能标签的提交动作.
一般而言使用twebbrowser来提交个人认为是一种比较好的方式.因为如果使用idhttp,可能出现用户页面需要通过调用script做一些处理后提交的问题.使用idhttp是无法捕获的.
而使用twebbrowser则完全模拟一个用户的操作过程.可以减少对页面的分析难度.做到准确提交.

不过在程序提交的时候还有一个问题必须要注意.如果程序本身还没有能运行完成也就是说twebbrowser的状态还没有complete的时候,千万不要通过程序提交那样会出现异常的.这点千万注意呀.

站内搜索