Ok, se me ocurre así de pronto que quizá cuando lo haces con los botones, el tiempo que transcurre desde que hace login hasta que pulsas el siguiente botón, es suficiente para que la página donde se encuentra el link cargue completamente.
Pero cuando lo haces todo seguido no le das tiempo suficiente para que cargue con lo que creo le es imposible encontrar el item(38).
Has probado a esperar a que la página cargue después del login?
No lo he probado... Pero intenta poner la linea de espera también aqui o retrasar la segunda accion.
Código Delphi
[-]
procedure TForm1.Button4Click(Sender: TObject);
Var
ovElemento: OleVariant;
begin
WebBrowser1.Navigate(''direccion pagina web'');
while webBrowser1.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
ovElemento := WebBrowser1.OleObject.Document.forms.item(0).elements;
ovElemento.item(1).value:='usuario'; ovElemento.item(2).value:='contraseña'; ovElemento.item(3).click;
while webBrowser1.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
ovElemento:= WebBrowser1.OleObject.Document.links;
ovElemento.item(38).click;
ovElemento := WebBrowser1.OleObject.Document.forms.item(1).elements;
ovElemento.item(2).value := 'Texto a enviar''; ovElemento.item(5).click;
end;
Ya me diras si era eso.
Saludos.