自动登录(webBrowser)

时间:2013-08-01 16:19:02

标签: delphi login browser delphi-7

我正在尝试登录(执行一些例行任务)到网页(www.soccerproject.com),我无法这样做,因为提交按钮类是“超级按钮”,它没有click()处理程序,或者一个ID开始。我试图执行绑定到按钮的onClick方法的JavaScript,但它没有用,所以这是我的代码,如果有人可以提供一些帮助,我将感激不尽。

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.soccerproject.com/spnewl_index.php');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var ii:integer ;
begin
if (WebBrowser1.LocationURL='http://www.soccerproject.com/spnewl_index.php') and (i<4) then inc(i);

if i=4 then begin
  WebBrowser1.OleObject.Document.getElementById('login').setAttribute('value', Edit1.Text);
  WebBrowser1.OleObject.Document.getElementById('password').setAttribute('value', Edit2.Text);  

  wait(200);
  WebBrowser1.OleObject.Document.forms[0].submit();
  WebBrowser1.Navigate('http://www.soccerproject.com/#');
  end;
end;

我认为4的原因是webBrowser需要完全加载并显示网站的时间(以便能够填写文本)。此外,wait()函数只需等待200毫秒(只是为了确定)。提前致谢

1 个答案:

答案 0 :(得分:4)

您的代码中存在许多问题。计数和等待程序确实没有必要。提供的代码向您展示了如何检测页面何时完全加载。不需要第二次调用Navigate,因为提交表单会导致浏览器加载主页面。 此代码已使用提供的站点进行测试并且有效:)

unit u_frm_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, MsHtml;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 WebBrowser1.Navigate('http://www.soccerproject.com/spnewl_index.php');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);

var
  CurrentBrowser: IWebBrowser2;
  TopBrowser: IWebBrowser2;
  Document: OleVariant;
  Doc3 :  IHTMLDocument3;
  Frm  :  IHtmlFormElement;

begin
 CurrentBrowser := pDisp as IWebBrowser2;
 TopBrowser := (ASender as TWebbrowser).DefaultInterface;
 if Assigned(CurrentBrowser) and Assigned(TopBrowser) then
  begin
   if CurrentBrowser = TopBrowser then
    begin
     Doc3 := CurrentBrowser.Document as IHTMLDocument3;
     Webbrowser1.OnDocumentComplete := nil; // remove handler to avoid reentrance
     Doc3.getElementById('login').setAttribute('value', 'SO17999392', 0);
     Doc3.getElementById('password').setAttribute('value', 'XXXXX', 0);
     Frm := Doc3.getElementById('indexform') as IHtmlFormElement;
     if Assigned(Frm) then
      Frm.submit;
    end;
  end;
end;

end.