He notado que el problema planteado es muy recurrente. Es como si las propiedades Busy y ReadyState de TWebBrowser, por sí solas, no fueran del todo fiables.
Hace tiempo implementé esta solución. Ojalá a ti también te resulte útil.
Código Delphi
[-]
Unit WaitWebBrowser;
Interface
Uses
ShDocVw, ActiveX;
Type
TWaitWebBrowser = Class (TWebBrowser)
Protected
WaitingForDocumentComplete :Boolean;
Function GetIdle :Boolean;
Procedure InvokeEvent (DispID :TDispID; Var Params :TDispParams);
Override;
Public
Procedure NavigateWait (Const URL :String);
Procedure WaitForIdle;
Property Idle :Boolean Read GetIdle;
End;
Implementation
Uses
Forms;
Function TWaitWebBrowser.GetIdle :Boolean;
Begin
Result := Not WaitingForDocumentComplete And Not Busy And
(ReadyState = ReadyState_Complete);
End;
Procedure TWaitWebBrowser.InvokeEvent (DispID :TDispID;
Var Params :TDispParams);
Begin
If DispID = 250 Then WaitingForDocumentComplete := True
Else
If (DispID = 259 ) And
(ReadyState = ReadyState_Complete) Then
WaitingForDocumentComplete := False;
Try
Inherited InvokeEvent (DispID, Params);
Except
WaitingForDocumentComplete := False;
Raise;
End;
End;
Procedure TWaitWebBrowser.NavigateWait (Const URL :String);
Begin
Navigate (URL);
WaitForIdle;
End;
Procedure TWaitWebBrowser.WaitForIdle;
Begin
Repeat
Forms.Application.ProcessMessages;
Until Idle;
End;
End.
Código Delphi
[-]WaitWebBrowser1.NavigateWait ('http://www.clubdelphi.com/');
Un saludo.
Al González.
P.D. Miguel, te recomienzo esforzarte en el empleo adecuado de acentos. Con ello te darás a entender mejor en tus siguientes intervenciones.