![]() |
Textbox ausfüllen
Hallo,
ich suche einen Weg um eine Textbox.
Code:
<textarea name="txt" rows=4 cols=60 onchange="return cleanDemoText()"></textarea>
Mit einem String zu füllen, und danach einen Button zu drücken.
Delphi-Quellcode:
Es befinden sich 2 Button auf dieser Seite, aber den, den ich drücken will, kommt zuerst. Also sollte es passen wie ich es gemacht habe.
WebBrowser1.Navigate(Url);
WebBrowser1.OleObject.document.forms.item(0).elements.item('txt').value:='Beispiel'; webbrowser1.oleobject.document.forms.item(0).submit; Nach dem Klick wird man auf eine Seite weitergeleitet, davon will ich den aktuellen Link, da er sich bei jedem Buttondruck verändert. Kann ich das so machen? Gibt es vielleicht einen besseren Weg es unsichtbar ablaufen zu lassen? Danke |
Re: Textbox ausfüllen
Zitat:
Oder du nutzt die Indy-Komponenten. Jedoch habe ich mit denen keine Erfahrung. |
Re: Textbox ausfüllen
Zitat:
Empfehlen kann ich an der Stelle HttpFox und Firebug als Addons für den Firefox zu benutzen (das einzige wozu ich den Firefox benutze :mrgreen:). Dann siehst du exakt was an Postdaten usw. an den Server gesendet wird. (Sieht man auch schon am Formular, aber damit bekommt man es direkt angezeigt, wenn man es daran nicht sieht.) |
Re: Textbox ausfüllen
Zitat:
![]() |
Re: Textbox ausfüllen
Oh ja, das Ding werde ich meiner Toolsammlung hinzufügen, danke. :firejump:
Jedenfalls helfen alle diese Tools dabei herauszufinden was da eigentlich an den Server geht, so dass man das auch ohne die Seite komplett im TWebBrowser abzurufen selbst senden kann. |
Re: Textbox ausfüllen
Thema erledigt.
Ich habe es selbst gelöst =) Danke =) Also ich hab jetzt herausgefunden, das wenn ich den Button (auf der Webseite) drücke, 3 Postvariablen übertragen werden. So sieht es bisher aus:
Delphi-Quellcode:
Damit simuliere ich ja sozusagen auch den Buttondruck oder?
values:=TStringList.Create;
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10'; IdHTTP1.HandleRedirects:=true; IdHTTP1.allowcookies:=true; values.Add('Bezeichner=Wert'); values.Add('Bezeichner=Wert'); values.Add('Bezeichner=Wert'); IdHTTP1.Post('Url', values); Denn nach dem Buttondruck werde ich auf eine andere Seite weitergeleitet, wie kann ich die URL dieser Seite herausfinden? Ich denke das hat irgendwas mit dem HandleRedirects zu tun oder? Grüße |
Re: Textbox ausfüllen
Falls es noch jemanden interessiert. Ich habe die Unit WbCtrl (
![]()
Delphi-Quellcode:
Damit wird nach den Namen und Value des Tags gesucht. Der Value ist die Aufschrift des Buttons, z.B. "Login". Das geht, falls der Button nicht bloß Submit heißt (dann fehlt der Name und Value im Tag).
function WbFindFieldByNameAndValue(WebBrowser: TWebBrowser; FieldName: string; var Field: TPoint): boolean;
var i, j: Integer; FormItem: Variant; begin Result := False; //Hat das Dokument Forms? (Frames) if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then Exit; //Bearbeite alle Frames for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); // Bearbeite alle Felder eines Frames for j := 0 to FormItem.Length - 1 do begin { try} // Feldname wurde gefunden // gebe ihn zurück und ende if (FormItem.Item(j).name = FieldName)OR(FormItem.Item(j).value = FieldName) then begin Field.x := i; // Position speichern Field.Y := j; Result := True; exit; end; {except Exit; end;} end; end; end {WbFindFieldByNameAndValue}; .... function WbBtnClick(WebBrowser: TWebBrowser; FieldName: string): Boolean; var Field: TPoint; begin // Position des Felds holen if not WbFindFieldByNameAndValue(WebBrowser, FieldName, Field) then begin Result := false; // Feld existiert nicht exit; // Ende end; try // CheckBox setzen WebBrowser.OleObject.Document.forms.Item(Field.x).Item(Field.y).Click; Result := True; except Result := false; Exit; end; end; Zum Monitoren des Internetverkehrs nehme ich ![]() Jörg |
Re: Textbox ausfüllen
Kurz zu deiner Lösung mit IdHttp:
1) das redirect geht automatisch, fall es dich doch interessiert, mit HttpAnalyzer anschauen oder im Firefox die Option automatischen redirect abschalten, und dann manuell durchklicken. Es gibt da auch noch eine Eigenschaft von TIdHttp die angibt, wieviele Redirects erlaubt sind. 2) Value.Add("Name=Value") wird nicht empfohlen, da es da Probleme geben kann mit Url-Endcoding. Empfohlen etwa so
Delphi-Quellcode:
wobei ich mir nicht sicher bin, ob man dann noch das Url-Encoding braucht. Ist hier im Forum schon mal erklärt wurden (habe ich auch bloß abgetippt und kreativ modifiziert). Einfach mal suchen.
MPFData:=TIdMultiPartFormDataStream.Create;
MPFData.AddFormField(UTF8Encode(FieldName1),UTF8Encode(Value1)); MPFData.AddFormField(UTF8Encode(FieldName2),UTF8Encode(Value2)); .... HtmlText:=TiDHTTP1.Post(UTF8Encode(Url),MPFData); Jörg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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