AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Textbox ausfüllen

Ein Thema von Linguini · begonnen am 2. Jun 2009 · letzter Beitrag vom 21. Jun 2009
Antwort Antwort
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#1

Textbox ausfüllen

  Alt 2. Jun 2009, 18:37
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
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Textbox ausfüllen

  Alt 2. Jun 2009, 22:39
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Textbox ausfüllen

  Alt 3. Jun 2009, 02:58
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 ). 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.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Textbox ausfüllen

  Alt 3. Jun 2009, 03:52
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 ). 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.
Fridolin Walther
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.581 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Textbox ausfüllen

  Alt 3. Jun 2009, 04:43
Oh ja, das Ding werde ich meiner Toolsammlung hinzufügen, danke.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Linguini

Registriert seit: 19. Mai 2009
95 Beiträge
 
#6

Re: Textbox ausfüllen

  Alt 3. Jun 2009, 08:27
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
  Mit Zitat antworten Zitat
DrRuediger

Registriert seit: 9. Sep 2008
Ort: Grabenstetten
4 Beiträge
 
Delphi 7 Professional
 
#7

Re: Textbox ausfüllen

  Alt 21. Jun 2009, 02:13
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
  Mit Zitat antworten Zitat
DrRuediger

Registriert seit: 9. Sep 2008
Ort: Grabenstetten
4 Beiträge
 
Delphi 7 Professional
 
#8

Re: Textbox ausfüllen

  Alt 21. Jun 2009, 02:34
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
  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:49 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