AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWbbrowser Formular ausfüllen und abschicken für Dummies
Thema durchsuchen
Ansicht
Themen-Optionen

TWbbrowser Formular ausfüllen und abschicken für Dummies

Ein Thema von goenner90 · begonnen am 3. Apr 2008 · letzter Beitrag vom 18. Mai 2008
Antwort Antwort
goenner90

Registriert seit: 25. Dez 2007
21 Beiträge
 
Delphi 7 Enterprise
 
#1

TWbbrowser Formular ausfüllen und abschicken für Dummies

  Alt 3. Apr 2008, 19:29
hi
Dp´ler,
dies ist mein erster Beitrag auf eurer Seite.
Ich bin jetzt aber leider nciht der Delphi-Pro in Sachen WEbbrowser.
(die Standard - Sachen , wie Vor , zurück, Refresh etc. und eine Adresse besuchen sind natürlich kein Problem aber es wäre sehr nett wenn ihr mir näher bringen könntet , wie man es hinbekommt im webbrowser ein formular auszufüllen und dieses Abzuschicken (submit --> soviel hab ich schon rausgefunden.)
Es handelt sich um die Seite Jappy.de und ich will ein Proggi schreiben was sich automatisch einloggt und die Seite halt im Intervall von 5 Minuten Neu lädt ( wobei das kein Problem darstellt, nur halt die Form [[Benutztername und Pw einzugeben und das abzuschicken bereitet mir Probleme]
Ich habe mir auch schon diberse Beiträge dazu im Forum durchgelesen verstehe das aber nicht ganz.

Wäre nett wenn mir jmd mal einen Source geben könnte.

Vielen Dank im Vorraus MFg goenner90

PS: Ich benutzte Delphi 7
  Mit Zitat antworten Zitat
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, 20: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
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 3. Apr 2008, 20:06
Hi,
Herzlich Willkommen in der Delphi-Praxis!

Also ausfüllen geht so:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value:=Edit1.Text; Absenden geht so:
WebBrowser1.OleObject.document.forms.item(0).submit; Alles klar?


Info: Die Sachen habe ich hier gefunden: http://www.delphi-treff.de/tipps/net...et/katalog/48/
Also erstmal dort suchen bevor du fragst, ok?


MFG Lars Wiltfang


Edit: Das geht auch einfacher! Du brauchst halt nur einmailg den Namen, hier FELDNAME!
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

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

  Alt 3. Apr 2008, 20:25
Hier noch eine Variante, ohne die 2 For-Schleifen:

Delphi-Quellcode:
uses
  MSHTML;

procedure WB_FillPwdForm(WB: TWebbrowser; UsernameField, User, PasswortField, Password: string);
var
  IDoc3: IHTMLDocument3;
  Inputs: IHTMLElementCollection;
  UID, UPWD: IHTMLElement;
begin
  if Assigned(WB.Document) and
    (Succeeded(WB.Document.QueryInterface(IHTMLDocument3, IDoc3))) then
  begin
    Inputs := IDoc3.getElementsByName(UsernameField);
    if Assigned(Inputs) then
    begin
      UID := Inputs.item(0, '') as IHTMLElement;
      if Assigned(UID) then
        (UID as IHTMLInputElement).value := User;
    end;
    Inputs := IDoc3.getElementsByName(PasswortField);
    if Assigned(Inputs) then
    begin
      UPWD := Inputs.item(0, '') as IHTMLElement;
      if Assigned(UPWD) then
        (UPWD as IHTMLInputElement).value := Password;
    end;
  end;
end;

// Beispiel Aufruf:
procedure TForm1.Button1Click(Sender: TObject);
begin
  WB_FillPwdForm(Webbrowser1, 'login[u]','mein_Benutzername','login[p]','mein_Passwort')
end;
Thomas
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#5

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

  Alt 3. Apr 2008, 20:26
Warum denn so schwer?
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

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

  Alt 4. Apr 2008, 06:59
Zitat von Larsi:
Warum denn so schwer?
Weil meine Methode (WB_FillPwdForm) etwas universeller ist.
D.h es spielt keine Rolle, in welcher Form sich das Element befindet.
Bei Frames wäre es nochmals komplizierter.

Beim Aufruf deines Codes muss sich das Element in Form 0 befinden oder man
muss die Form Nummer zuvor herausfinden.
Wenn sich z.B die Struktur der Webseite ändert, indem eine neue Form hinzukommt,
funktioniert dein Code nicht mehr und muss angepasst werden.

Dein Code macht auch keine Überprüfung, ob ein Dokument existiert, ob Forms überhaupt verfügbar ist etc.

Navigiere mal zu c:\ im Webbrowser. Dann verstehst du, was ich meine.
Thomas
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#7

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

  Alt 17. Mai 2008, 20:14
UNd wie kann ich einen Radiobutton auswählen?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 17. Mai 2008, 20:21
Schau mal, ob dich eines der Themen weiterbringt:

Webbrowser element click
Selectfelder mit TWebBrowser ansprechen ?
Twebbrowser, Radiobutton auswählen
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

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

  Alt 18. Mai 2008, 07:29
Hallo, für das Mini Webbrowser Demo habe ich mal folgende Funktion geschrieben:

Delphi-Quellcode:
// Radiobutton auswählen:
  WB_SetRadioCheckboxField(WB, 'radio', 'Water', True);
Delphi-Quellcode:
// Checkbox auswählen:
  WB_SetRadioCheckboxField(WB, 'checkbox', 'Milk', True);

Delphi-Quellcode:
function WB_FindFieldByValue(WebBrowser: TWebBrowser; FieldType, FieldValue: string; var Field: TPoint): boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  if WebBrowser.OleObject.Document.all.tags('FORM').Length <> 0 then
    for i := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
    begin
      FormItem := WebBrowser.OleObject.Document.forms.Item(I);
      for j := 0 to FormItem.Length - 1 do
      begin
        try
          if (FormItem.Item(j).Value = FieldValue) and
            (FormItem.Item(j).Type = FieldType) then
          begin
            Field.x := i;
            Field.Y := j;
            Result := True;
            Exit;
          end;
        except
          Exit;
        end;
      end;
    end;
end;
Delphi-Quellcode:
function WB_SetRadioCheckboxField(WebBrowser: TWebBrowser; FieldType, FieldValue: string; Checked: boolean): Boolean;
var
  Field: TPoint;
begin
  Result := WB_FindFieldByValue(WebBrowser, FieldType, FieldValue, Field);
  if Result then
  try
    WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Checked := Checked;
    Result := True;
  except
    Result := False;
  end;
end;
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz