Einzelnen Beitrag anzeigen

gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: Webbrowser OleObject - Felder füllen

  Alt 10. Apr 2013, 12:41
HI alle zusammen

Sorry bin gestern plötzlich weggeknackt

Also @ Volker:
Wichtig wäre ja nur das die URL nach dem Login nicht mehr die gleiche ist, oder? Damit der Code in OnDocument Complete nur 1x ausgeführt wird.
Und wenn ich das korrekt sehe, passiert das auch so. Der Code wird 1x ausgeführt dann bin ich eingeloggt. Und dannach möchte ich ja mit dem Button1 die Felder füllen. (Was bis jetzt leider noch immer nicht klappt)

URL der Login Form: http://www1.sunrise.ch/SMS-Sender-cb...de_CH-CHF.html
URL nach dem Login: https://www1.sunrise.ch/is-bin/INTER...LoginProcess=1


@Nahpets
Sorry für die Verwirrung. Für das Login von dem wir hier sprechen, werden nur folgende Teile des Codes benutzt (Das was du meinst, wird nur bei einem anderen Server (www.bern-web.ch) angewendet (Wenn die Combobox auf itemindex 2 wäre))

1. Ich klicke den Button an um auf das Login Formular zu gelangen:
Delphi-Quellcode:
if combobox2.ItemIndex=2 then webbrowser1.Navigate('http://www.bern-web.ch/');

if combobox2.ItemIndex=1 then webbrowser1.Navigate('http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html');
progressbar1.Position:=25;
2. Sobald die Login form voll geladen ist wird über OnDocument Complete folgender Code ausgeführt: (Die obere hälfte des Codes ist hierbei unrelevant da diese auch wieder nur bei WWW-.bern-web.ch benutzt wird)
Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
i:integer;
begin

progressbar1.Position:=35;

if combobox2.ItemIndex=2 then begin
WB_GetHTMLCode(Webbrowser1, Memo2.Lines);
if FillForm(WebBrowser1, 'smsMessage', memo1.Text)=true then begin
 progressbar1.Position:=50;
  webbrowser1.Stop;
  FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
  FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
  if combobox1.ItemIndex=1 then FillForm(WebBrowser1, 'intlPrefix', '004176');
   if combobox1.ItemIndex=2 then FillForm(WebBrowser1, 'intlPrefix', '004177');
  if combobox1.ItemIndex=3 then FillForm(WebBrowser1, 'intlPrefix', '004178');
    if combobox1.ItemIndex=4 then FillForm(WebBrowser1, 'intlPrefix', '004179');

  webbrowser1.oleobject.document.forms.item(4).submit;
progressbar1.Position:=75;
  end else begin
      if progressbar1.Position=35 then begin
if edit7.Text='http://www.bern-web.ch/then begin
if pos('Heute wurden von Ihrer IP-Adresse',Memo2.Text) > 0 then label1.Caption:='Fehler: Limit erreicht! (IP oder Service wechseln)else label1.Caption:='Fehler: Service Down?';
label1.Visible:=true;
end;
end;
  end;
if edit7.Text='http://www.bern-web.ch/Bern/sms_ok/then begin
  Progressbar1.Position:=100;
webbrowser1.Navigate('www.google.com');
end;
  end;


///////////////// //////////////////////

if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.htmlthen begin
repeat;
Application.ProcessMessages;
Sleep(1);
until WebBrowser1.ReadyState=4;

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2];

if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin

webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ;
//webbrowser1.oleobject.document.forms.item(1).submit;
end;

//Server1 ENDE
end;



end;


3. Nachdem also die Login Daten eingeben wurden und der Login Button gedrückt wurde (Ob Manuell oder per: webbrowser1.oleobject.document.forms.item(1).submit; Warte ich bis die Seite wieder komplett geladen wurde und versuche dann die Felder per Button Klick zu füllen:

Delphi-Quellcode:
begin
   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
   if not WBFillForm(webbrowser1,'message',Memo1.Text) then begin
     ShowMessage('Das Textfeld message wurde nicht gefunden.');
   end;
   Application.ProcessMessages;
   while webbrowser1.Busy do Application.ProcessMessages;
   while webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
end;
Und hier will er mir eben einfach keins der Felder füllen! Erhalte einfach immer die Meldung: ShowMessage('Das Textfeld message wurde nicht gefunden.');
Robert
  Mit Zitat antworten Zitat