【问题标题】:submit a form with delphi用delphi提交表单
【发布时间】:2014-05-17 19:51:54
【问题描述】:

我尝试使用 Delphi 提交预填表格 - 但似乎不可能。我预填的网址是:Lufthansa.com advanced search page

我无法点击“查找航班”按钮:

<button type="submit" class="processBtn">
  <span class="stageButtonLeft">&nbsp;</span>
  <span class="stageButtonRight">Find flights</span>
</button>

或提交表格:

<form method="post" autocomplete="off" 
  action="/booking/validation/flightavailability" 
  id="advancedSearchFlights">

我尝试了几件事:

ie.OleObject.Document.forms.item(2).elements.item(0).click;

ie.OleObject.Document.forms.item(2).elements.item('submit').click;

 Frm := Doc3.getElementById('advancedSearchFlights') as IHtmlFormElement;
 if Assigned(Frm) then
  Frm.submit;

什么都没有发生。如何通过 Delphi 提交此表单?

【问题讨论】:

  • 尝试做一些调试。代码哪里出错了?
  • 我会改为向网站发出 POST 请求。
  • “查找航班”本身不是按钮,而是按钮顶部的span。您实际上要“单击”什么 - 按钮或跨度?您没有显示表单的完整 HTML,因此我们看不到各种元素的父/子关系。另外,要提交表单,不要“点击”表单的提交按钮,调用form 对象本身的submit() 方法。

标签: forms delphi browser submit


【解决方案1】:

您可以使用chrome调试表单事件以获取正确的参数并使用Indy发布表单。

这样的……

var
  objHttp: TIdHttp;
  objPostResponse: TMemoryStream;
  objParamPost: TStringList;
begin
    objHttp := TIdHTTP.Create(nil);
    try
        objHttp.HandleRedirects := True;
        objHttp.AllowCookies := True;
        objHttp.Get('http://www....');
        objPostResponse := TMemoryStream.Create;
        try
            objParametrosPost := TStringList.Create;
            try
                objParamPost.Add('hdnStatus=ativo');                    
                objHttp.Post('http://www...', objParamPost, objPostResponse);
            finally
                FreeAndNil(objParamPost);
            end;
            // do whatever you want with the response
        finally
          FreeAndNil(objPostResponse);
        end;
    finally
        FreeAndNil(objHttp);
    end;
end;

【讨论】:

  • TIdHTTP.Create(nil)可以简写为TIdHTTP.Create
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 2011-06-17
  • 2016-01-09
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多