Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi POST Formular ausfüllen + Werte ablesen (https://www.delphipraxis.net/116521-post-formular-ausfuellen-werte-ablesen.html)

FreakLitkowsky 1. Jul 2008 00:04


POST Formular ausfüllen + Werte ablesen
 
Hallo Leute!
Ich schraube seit neustem wieder an meinem SMS-Programm herum und brauche wieder eure Hilfe.

Also, es geht um folgendes Problem / folgende Probleme:
1) Ich benutze TWebbrowser und möchte gerne, dass man entsprechende LabelEdit-Felder ausfüllt und diese dann automatisch in einem Post-Formular eingefügt werden (nach klicken auf einem Button).
2)Ebenfalls will ich einen Wert aus einem Post-Formular Objekt entnehmen und diese dann für Delphi in einer Verzweigung überprüfen lassen, bsp. Das Formular besitzt ein Objekt namens Nachricht. Nachricht ist der Wert "Test" zugeordnet. Jetzt will ich mit Delphi überprüfen, ob der Wert des Post-Fomular-Objektes = Test ist (also mit IF).
3) Ich möchte gerne, dass alle PopUps die von TWebbrowser ausgehen geblockt werden. Ich weiß aber nicht wie das gehen soll.
:gruebel:
...
Ich hoffe ihr wisst wovon ich rede und ihr habt das verstanden was ich euch versuche zu erklären.
Ihr würdet mir damit echt einen großen gefallen tun.

Wenn ihr weitere Informationen braucht fragt ruhig.

:hi: Bis dann

toms 1. Jul 2008 04:38

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo,

Wie sieht denn dein bisheriger Code bis aus? Wo genau kommst du nicht weiter?

Zu allen Punkten sind Infos in der DP / Google zu finden.

z.B zu Punkt 1) [google]webbrowser ausfüllen[/google] oder [google]webbrowser ausfüllen delphi[/google]

FreakLitkowsky 1. Jul 2008 04:52

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo, danke für die Antwort.

Ich werde mir deine Links mal anschauen. Vielleicht finde ich ja dort eine Antwort.


Also den bisherigen Code habe ich bis jetzt immer wieder erneuert, weil ich schon vergebens so viele verschiedenen Methoden ausprobiert habe.

Grob gesehen hänge ich an folgendem Punkt, bzw so würde das Programm aussehen:

Es existieren 2 LabelEdit Felder (für die Nummer und für die Textnachricht).
Darunter befindet sich ein Button.
Beim Klick auf den Button loggt sich TWebbrowser automatisch auf eine Seite ein, wo man SMS verschicken kann.
Dabei sollten die Felder im Web-Formular mit den Werten der LabelEdit ausgefüllt werden.
Wenn alle Werte eingetragen sind, soll das Formular abgesendet, bzw die SMS versendet werden (im Formular löst diesen Mechanismus ein Button aus).

So gesehen soll der Benutzer nicht mitkriegen, dass der TWebbrowser aktiv ist.

Dabei gibt es jedoch ein Problem. Es sind nicht beliebig viele SMS verfügbar. Wie viele SMS übrig sind befindet sich ebenfalls in Form eines Wertes in dem dementsprechenden Web-Formular.
Wenn nun keine SMS mehr verfügbar sind, soll eine Meldung erscheinen, dass alle SMS aufgebraucht sind.


Ich bin immernoch am überlegen wie man das vielleicht noch einfacher gestalten könnte. :gruebel:


Falls dir das noch weiterhilft: Der Anbieter dieser SMS ist Arcor. Ein Benutzernamen habe ich schon, die Anmeldung bekomme ich auch hin, da es sich dabei um ein GET-Formular handelt. Jedoch ist das Formular für die SMS-Versendung kein GET- sondern ein POST-Formular.

FreakLitkowsky 4. Jul 2008 23:18

Re: POST Formular ausfüllen + Werte ablesen
 
Hi nochmal,
also ich hab das soweit fertig bekommen, dass die Werte in die jeweiligen Felder eingetragen werden.

Aber... naja, wie man die Werte abliest... dazu habe ich eine Seite gefunden, aber ich hab den Link verschlampt und ich suche den jetzt schon fast eine Stunde :cry:
Kannst du, oder jemand anders mir schnell helfen???

Also bis jetzt hab ich das so gemacht mit den Werte eintragen:

Delphi-Quellcode:
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;

[...]

WB_FillPwdForm(Webbrowser1, 'FELDNAME1','WERT1','FELDNAME2','WERT2');

FreakLitkowsky 6. Jul 2008 18:53

Re: POST Formular ausfüllen + Werte ablesen
 
Sorry, dass ich nochmal schreibe, aber ich kann meinen vorherigen Post nicht mehr bearbeiten.

Also ich bräuchte jetzt eine Methode, dass ich mit Hilfe einer späteren Verzweigung einen den Wert eines bestimmten Feldes abfragen kann, bsp.:
(Der Name des Formular-Eingabefeld, sei es in diesem Fall ein normales Eingabefeld wird in einer String-Variable namens "FormularFeldname" gespeichert.)
Delphi-Quellcode:
IF FormularFeldname = LabeledEdit1.Text
THEN
Begin
   //Trifft zu
   ShowMessage('Das Feld hat den selben Wert wie das Einhabefeld.');
End
ELSE
Begin
   //Trifft nicht zu
   ShowMessage('Das Feld hat nicht den selben Wert wie das Einhabefeld.');
End;
Bitte helft mir. Das wäre dann der letzte Schritt in meinem Programm... :arrow:

FreakLitkowsky 10. Jul 2008 21:12

Re: POST Formular ausfüllen + Werte ablesen
 
Bitte helft mir... ich kann das Programm nicht weitermachen. Ich finde den Code nicht mehr.
:coder2:

toms 11. Jul 2008 04:58

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo, zum Ausfüllen der Felder hast du ja den Code. Das Auslesen funktioniert praktisch ähnlich.

Anstatt
Delphi-Quellcode:
(UID as IHTMLInputElement).value := User;
schreibst du

Delphi-Quellcode:
IrgendeineStringVariable := (UID as IHTMLInputElement).value

FreakLitkowsky 11. Jul 2008 19:18

Re: POST Formular ausfüllen + Werte ablesen
 
:gruebel:
Danke für die Hilfe, aber ich hab das jetzt nicht ganz verstanden (tut mir leid).

Sollte ich dafür jetzt eine neue function machen oder was?
Wäre wirklich total nett von dir wenn du mir irgendein Beispiel liefern könntest :wink: .

toms 11. Jul 2008 19:32

Re: POST Formular ausfüllen + Werte ablesen
 
obige Funktion ungetestet abgeändert:

Delphi-Quellcode:
function WB_GetFieldValue(WB: TWebbrowser; FieldName: string): string;
var
  IDoc3: IHTMLDocument3;
  Inputs: IHTMLElementCollection;
  UID: IHTMLElement;
begin
  Result := '';
  if Assigned(WB.Document) and
    (Succeeded(WB.Document.QueryInterface(IHTMLDocument3, IDoc3))) then
  begin
    Inputs := IDoc3.getElementsByName(FieldName);
    if Assigned(Inputs) then
    begin
      UID := Inputs.item(0, '') as IHTMLElement;
      if Assigned(UID) then
        Result := (UID as IHTMLInputElement).value;
    end;
  end;
end;

FreakLitkowsky 11. Jul 2008 23:03

Re: POST Formular ausfüllen + Werte ablesen
 
Vielen Dank!
Hab es geprüft und funktioniert!!!

Vielen lieben Dank :dp: :cheers:

FreakLitkowsky 11. Jul 2008 23:51

Re: POST Formular ausfüllen + Werte ablesen
 
Ich habe noch eine abschließende Frage.
Und zwar funzt das nicht mehr mit dem Werte Eintragen. Grund: Ein Einhabefeld des Formulars ist eine "textarea", also was man mit dem Memo von Delphi vergleichen könnte.
Jedenfalls meckert Delphi immer, wenn ich versuche, einen Text aus einem Memo in die textarea einzutragen.
Habe ich etwas falsch gemacht, bzw muss ich etwas ändern :gruebel:

Zum Ausfüllen der Felder habe ich die von mir oben genannte prozedur benutzt.

Ahh bitte helft mir :wall:

toms 12. Jul 2008 05:42

Re: POST Formular ausfüllen + Werte ablesen
 
Zitat:

Jedenfalls meckert Delphi immer, wenn ich versuche, einen Text aus einem Memo in die textarea einzutragen.
Delphi-Quellcode:
function WB_SetFormValue(WB: TWebbrowser; FieldName, sValue: string): string;
var
  iForms, iItems: Integer;
  FormItem: OleVariant;
begin
  Result := '';
  for iForms := 0 to WB.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WB.OleObject.Document.forms.Item(iForms);
    for iItems := 0 to FormItem.Length - 1 do
    begin
      try
        if SameText(FormItem.Item(iItems).Name, FieldName) then
        begin
          FormItem.Item(iItems).Value := sValue;
        end;
      except
      end;
    end;
  end;
end;

FreakLitkowsky 14. Jul 2008 02:39

Re: POST Formular ausfüllen + Werte ablesen
 
Ok Vielen Dank.
Ich hatte in letzter Zeit viel zu tun und konnte die Methode erst jetzt testen.

Mir ist noch aufgefallen, dass der Wert, den ich mit der Methode "WB_GetFieldValue" überprüfen möchte ebenfalls in einer "Textarea" gespeichert ist. Und wie schon gesagt, vertragen sich diese Methoden nicht mit einem "Textarea"-Feld.
Ich habe versucht, deine Methode so umzuschreiben, dass ich sie in einer Verzweigung aufrufen kann, aber es kamen Fehler über Fehler (ich bin auch noch ein Neuling in Sachen Delphi-Programmierung :oops: ).

Aber ich denke, wenn ich das jetzt hinbekommen würde, hätte ich keine weiteren Fragen mehr zu diesem Thema :stupid:

Ich danke schon mal im Voraus :thumb:

toms 14. Jul 2008 06:28

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo, was hindert dich daran, WB_SetFormValue in WB_GetFormValue umzuschreiben?

Delphi-Quellcode:
function WB_GetFormValue3(WB: TWebbrowser; FieldName: string): string;
var
  iForms, iItems: Integer;
  FormItem: OleVariant;
begin
  Result := '';
  for iForms := 0 to WB.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WB.OleObject.Document.forms.Item(iForms);
    for iItems := 0 to FormItem.Length - 1 do
    begin
      try
        if SameText(FormItem.Item(iItems).Name, FieldName) then
        begin
          Result := FormItem.Item(iItems).Value;
        end;
      except
      end;
    end;
  end;
end;

FreakLitkowsky 14. Jul 2008 14:02

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo. Danke. Ich konnte das nicht selbst umwandeln, weil ich eigentlich noch ein Neuling bin, habe es aber versucht, mir wurden dabei jedoch immer wieder Fehler angezeigt :wall: aber jetzt klappts ja zum Glück :-D

Abschließend habe ich aber noch ein aller letztes Problem: Das absenden des Formulars. Ich habe die SuFu hier im Forum benutzt und bin auf folgenden Code gestoßen:
Delphi-Quellcode:
WebBrowser.OleObject.document.forms.item(1).submit;
Ich habe ihn getestet, er funktioniert auch: Nur leider im falschen Formular.
Auf der Seite befinden sich 2 Formulare: Eine Suchmaschine (am oberigen Rand) und das SMS-Formular.
(Das Formular wird im Quelltext eher aufgerufen als das SMS-Formular).
Es wird immer wieder der Button des Suchmaschinen-Formulars aktiviert. Beim SMS Formuar gibt es wiederum wieder 2 Buttons (Senden, Reset).

Gibt es vielleicht irgendeine Möglichkeit, das Formular "zu wechseln" und den "senden" Button anzuklicken.

Ich habe schon probiert, den Integer Wert, der bei "item" in Klammern steht zu ändern, Ich dachte, die Buttons wären in einer Art aufzählung gegliedert, z.B.
Suchmaschine "Suchen" = 0.
SMS-Senden "Senden" = 1.
SMS-Senden "Reset" = 2.
Leider ohne erfolg. Denn wenn ich den Wert 1 genommen habe, hat sich nichts getan und beim Versuch den Wert 2 zu benutzen, wurde mir eine Fehlermeldung angezeigt.

Ansonsten kann ich sagen, dass mein Programm bis dahin (dank deiner Hilfe) ziemlich gut läuft. :cheers:

toms 15. Jul 2008 06:34

Re: POST Formular ausfüllen + Werte ablesen
 
Hallo, Google mal nach Bei Google suchenWbBtnClick

FreakLitkowsky 15. Jul 2008 17:01

Re: POST Formular ausfüllen + Werte ablesen
 
Dankeschön, jetzt funktioniert mein Programm endlich.

Vielen lieben Dank für all deine Mühe!!! :balloon: :dancer2:


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