![]() |
TWbbrowser Formular ausfüllen und abschicken für Dummies
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 :roll: ganz. Wäre nett wenn mir jmd mal einen Source geben könnte. Vielen Dank im Vorraus MFg goenner90 PS: Ich benutzte Delphi 7 |
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Hallo und Willkommen in der Delphi-PRAXis! :hi:
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ü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:
Aufruf:
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;
Delphi-Quellcode:
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.
FillForm(Webbrowser1, 'login[u]','mein_Benutzername');
FillForm(Webbrowser1, 'login[p]','mein_Passwort'); Zum Abschicken genügt in diesem Fall dieser Aufruf:
Delphi-Quellcode:
Wichtig ist, dass die Felder erst dann ausgefüllt werden, wenn das Dokument im Webbrowser fertig geladen ist.
WebBrowser1.OleObject.Document.forms.item(0).elements.item(2).click;
|
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Hi,
Herzlich Willkommen in der Delphi-Praxis! :dp: Also ausfüllen geht so:
Delphi-Quellcode:
Absenden geht so:
WebBrowser1.OleObject.document.forms.item(0).elements.item('FELDNAME').value:=Edit1.Text;
Delphi-Quellcode:
Alles klar?
WebBrowser1.OleObject.document.forms.item(0).submit;
Info: Die Sachen habe ich hier gefunden: ![]() 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! |
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
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; |
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Warum denn so schwer? :)
|
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Zitat:
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. |
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
UNd wie kann ich einen Radiobutton auswählen?
|
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Schau mal, ob dich eines der Themen weiterbringt:
![]() ![]() ![]() |
Re: TWbbrowser Formular ausfüllen und abschicken für Dummies
Hallo, für das
![]()
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz