Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Textbox ausfüllen (https://www.delphipraxis.net/134983-textbox-ausfuellen.html)

Linguini 2. Jun 2009 17:37


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:
WebBrowser1.Navigate(Url);
WebBrowser1.OleObject.document.forms.item(0).elements.item('txt').value:='Beispiel';
webbrowser1.oleobject.document.forms.item(0).submit;
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.
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

quendolineDD 2. Jun 2009 21:39

Re: Textbox ausfüllen
 
Zitat:

Gibt es vielleicht einen besseren Weg es unsichtbar ablaufen zu lassen?
Du könntest das WEbbrowser-Objekt nur im Quelltext erzeugen, jedoch nicht visualisieren.
Oder du nutzt die Indy-Komponenten. Jedoch habe ich mit denen keine Erfahrung.

jaenicke 3. Jun 2009 01:58

Re: Textbox ausfüllen
 
Zitat:

Zitat von quendolineDD
Oder du nutzt die Indy-Komponenten. Jedoch habe ich mit denen keine Erfahrung.

Das einzige was da nicht funktioniert sind Skripte. Solange also nicht beim Abschicken per Skript noch etwas "gedreht" wird, sollte es mit den Indys nicht nur einfacher, sondern auch deutlich schneller gehen.

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.)

Fridolin Walther 3. Jun 2009 02:52

Re: Textbox ausfüllen
 
Zitat:

Zitat von jaenicke
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.

Da würd ich Dir an dieser Stelle einfach mal Fiddler ans Herz legen wollen. Fiddler ist ein Web Debugger mit dem man letztlich so ziemlich alles was über HTTP ab geht live beobachten und auch beliebig manipulieren kann. Dabei werden eine ganze Reihe von Anwendungen unterstützt. Einfach optimal für solche Geschichten (und vor allem auch um seinen eigenen Code zu testen, da man z.B. fehlerhafte Antworten provozieren kann). Ist übrigens das Projekt eines der IE Entwickler und ist mittlerweile glaube ich auch Bestandteil der Windows IE Power Toys.

jaenicke 3. Jun 2009 03:43

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.

Linguini 3. Jun 2009 07:27

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:
 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);
Damit simuliere ich ja sozusagen auch den Buttondruck oder?
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

DrRuediger 21. Jun 2009 01:13

Re: Textbox ausfüllen
 
Falls es noch jemanden interessiert. Ich habe die Unit WbCtrl ( Button in TWebBrowser anklicken ... ) modifiziert:
Delphi-Quellcode:
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;
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).
Zum Monitoren des Internetverkehrs nehme ich HttpAnalyzer, der kostet jedoch etwas, ist aber eine Profiversion, die ich empfehlen kann.

Jörg

DrRuediger 21. Jun 2009 01:34

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:
MPFData:=TIdMultiPartFormDataStream.Create;
MPFData.AddFormField(UTF8Encode(FieldName1),UTF8Encode(Value1));
MPFData.AddFormField(UTF8Encode(FieldName2),UTF8Encode(Value2));
....
HtmlText:=TiDHTTP1.Post(UTF8Encode(Url),MPFData);
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.

Jörg


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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