我正在尝试登录(执行一些例行任务)到网页(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毫秒(只是为了确定)。提前致谢
答案 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.