Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TWbbrowser Formular ausfüllen und abschicken für Dummies

  Alt 3. Apr 2008, 19:04
Hallo und Willkommen in der Delphi-PRAXis!

Vorgehen:

Den Quelltext der Seite betrachten und den relevanten Teil suchen.
(Wenn du im Quelltext nach "Mitgliedsname" suchst, findest du diesen Code schnell)

Code:
   <form method="post" action="/passwort" id="login" onSubmit="javascript:ssl();">
   <div class="libo"><div style="height:10px"></div><div style="text-indent:8pt">Login:</div></div>
   <div class="lib">
   Mitgliedsname:
<input type="text" name="login[u]" class="libf">


   Passwort:
<input type="password" name="login[p]" class="libf"><input type="submit" name="Submit" value="login">


   [url="/passwort"]Passwort vergessen?[/url]


   <input type="checkbox" id="ssl_login" checked>[url="/infos/ssl/"]mit SSL-Verschl&uuml;sselung[/url]


    </div>
    </form>

Der "Mitgliedsname" muss also in das Input Feld mit dem Namen login[u]

Das "Passwort" muss also in das Input Feld mit dem Namen login[p]


Dann gehen wir alle Forms und darin enthaltenen Items durch und überprüfen, ob
der Name des Feldes mit unseren Feldern übereinstimmt.


Delphi-Quellcode:
var
  iForms, iItems: Integer;
  FormItem: OleVariant;
  FelddName: string;
begin
  FeldName := 'login[u]';
  // durch alle Forms iterieren
  for iForms := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(iForms);
  // durch alle Form Items iterieren
    for iItems := 0 to FormItem.Length - 1 do
    begin
        // überprüfen, ob der Name des Items mit unserem gesuchten Feldnamen übereinstimmt
        if FormItem.Item(iItems).Name = FeldName then
        begin
          // Feld ausfüllen
          FormItem.Item(iItems).Value := 'Mein Mitgliedsname';
        end;
    end;
  end;

Verallgemeinert:

Delphi-Quellcode:
function WB_FillForm(WebBrowser: TWebBrowser; FieldName: string; sValue: string): Boolean;
var
  iForms, iItems: Integer;
  FormItem: OleVariant;
begin
  Result := False;
  for iForms := 0 to WebBrowser.OleObject.Document.forms.Length -1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(iForms);
    for iItems := 0 to FormItem.Length -1 do
    begin
      try
        if FormItem.Item(iItems).Name = FeldName then
        begin
          FormItem.Item(iItems).Value := sValue;
          Result := True;
        end;
      except
      end;
    end;
  end;
end;
Aufruf:

Delphi-Quellcode:
FillForm(Webbrowser1, 'login[u]','mein_Benutzername');
         FillForm(Webbrowser1, 'login[p]','mein_Passwort');
Die FillForm Prozedur kann natürlich auch erweitert werden, so dass mehrere Felder auf einmal übergeben werden und so ein mehrfaches iterieren der Felder entfällt.

Zum Abschicken genügt in diesem Fall dieser Aufruf:

WebBrowser1.OleObject.Document.forms.item(0).elements.item(2).click; Wichtig ist, dass die Felder erst dann ausgefüllt werden, wenn das Dokument im Webbrowser fertig geladen ist.
Thomas
  Mit Zitat antworten Zitat