Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Kann man mit Delphi Formulare im TWebbrowser füllen? (https://www.delphipraxis.net/101798-kann-man-mit-delphi-formulare-im-twebbrowser-fuellen.html)

tomate007 18. Okt 2007 09:05


Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Hallo,
ich hab da ein kleines Problem und zwar greife ich mit einen TWebbrowser auf eine Internetseite zu wo sich ein Formular befindet.

Dieses müsste ich mit Delphi ausfüllen und dann den Button Weiter mit Delphi "drücken".

Ein Firefox PlugIn namens IMacros kann dies, dann müsste es delphi doch auch können oder??


MFG
Andre

DeddyH 18. Okt 2007 09:07

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Bemühe mal die Forensuche.

quendolineDD 18. Okt 2007 09:37

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Jop, das geht und ist auch garnicht schwer ;)

Delphi-Quellcode:
unit DemoFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TDemoForm = class(TForm)
    Button: TButton;
    procedure ButtonClick(Sender: TObject);
    procedure BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
  private
    ActiveUrl: string;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

uses
  MSHTML;

procedure TDemoForm.ButtonClick(Sender: TObject);
const
  url = 'http://www.google.de';
var
  wb: TWebBrowser;
  body, doc, frm: OleVariant;
begin
  wb := TWebBrowser.Create(nil);
  wb.ParentWindow := HWND(HWND_MESSAGE);
  wb.OnBeforeNavigate2 := BeforeNavigate2;
  wb.Navigate(url);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  doc := wb.OleObject.Document;
  body := doc.body;
  frm := doc.Forms.Item(0);
  frm.Elements.Item('q').Value := 'onyx';
  frm.Elements.Item('btnG').Click;
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  wb.Free;
  ShowMessage(StringReplace(ActiveUrl, '&', '&&', [rfReplaceAll]));
end;

procedure TDemoForm.BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  with Sender as TWebBrowser do
    if pDisp = DefaultInterface then
      ActiveUrl := URL;
end;

end.
Beispielcode ist von hier #9.

Viel Spaß

tomate007 19. Okt 2007 23:03

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Danke quendolineDD,
der Code ist super.. mit dem Beispiel www.google.de funktionert das auch super nur wenn ich es umschreibe, also URL auf
Delphi-Quellcode:
const
  url = 'http://xxxxxx.de/login/login_form';
und
Delphi-Quellcode:
  frm.Elements.Item('__ac_name').Value := 'test';
  frm.Elements.Item('__ac_password').Value := 'test';
  frm.Elements.Item('submit').Click;
kommt folgende Fehlermeldung beim klicken auf den Button:

Zitat:

Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetretten. Meldung:
Zugriffsverletzung bei Adresse 00456ECF in Modul Project1.exe. Lesen von Adresse 00000000
Prozess wurde angehalten Mit einzelne Anweisung oder Start vortfahren.
Warum ist das so??? Mein Gedanke war das vllt das Problem darin besteht das ich kein .php oder .asp oder sonstiges in der URL habe und deswegen ein Fehler erzeugt wird??

Weil egal wo ich sonst das programm teste... überall gehts... nur bei dieser url nicht.

Hier mal der komplette code, die url habe ich mal verfremdet...:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    WebBrowser2: TWebBrowser;
    procedure WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    procedure Button1Click(Sender: TObject);
  private
    ActiveUrl: string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 uses
  MSHTML;

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  with Sender as TWebBrowser do
    if pDisp = DefaultInterface then
      ActiveUrl := URL;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
  url = 'http://xxxxxxxxx.de/login/login_form';
var
  wb: TWebBrowser;
  body, doc, frm: OleVariant;
begin
  wb := TWebBrowser.Create(nil);
  wb.ParentWindow := HWND(HWND_MESSAGE);
  wb.OnBeforeNavigate2 := Webbrowser1.OnBeforeNavigate2;
  wb.Navigate(url);
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  doc := wb.OleObject.Document;
  body := doc.body;
  frm := doc.Forms.Item(0);
  frm.Elements.Item('__ac_name').Value := 'test';
  frm.Elements.Item('__ac_password').Value := 'test';
  frm.Elements.Item('submit').Click;
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
  wb.Free;
  ShowMessage(StringReplace(ActiveUrl, '&', '&&', [rfReplaceAll]));

end;

end.

quendolineDD 19. Okt 2007 23:09

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Hast du mal die absolute URL versucht? Also bis zu dem File der Loginform?

marabu 20. Okt 2007 07:03

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Moin Andre,

die Fehlermeldung bedeutet, dass du einen nicht initialisierten Zeiger verwendest. Eventuell stimmt einfach der Seitenaufbau nicht mit dem von Google überein. Die Eingabefelder werden auf dem ersten Formular der Anmeldeseite adressiert.

Delphi-Quellcode:
// ...
  frm := doc.Forms.Item(0); // get handle of first form on page
// ...
Setze einen Haltepunkt hinter die erste Warteschleife und gehe schrittweise durch den Code. Dabei kannst du den Zustand der einzelnen Variablen überprüfen und findest sicher deinen Fehler.

Grüße vom marabu

tomate007 20. Okt 2007 22:34

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Also, vorweg kann ich sagen das es auf JEDER ANDEREN SEITE funktioniert... nur nich auf der von mir ^^

und zwar bricht der bei der 1. repeat until ab:

Delphi-Quellcode:
 repeat
    Sleep(50);
    Application.ProcessMessages;
  until wb.ReadyState >= READYSTATE_COMPLETE;
aber es muss rein theoretisch an der internetseite liegen, da es bei allen anderen geht.
Eine direkte URL habe ich nicht und werde ich auch nicht bekommen können... es ist von unsere Firmenpartner gemacht... und die geben es nicht raus..

MFG
Andre

PS: Ich weiß das ist jetzt eine sehr sehr große bitte... aber könnte vllt einer den Code den quendolineDD gepostet hat einmal richtig in ein projekt paken und hier per zip hochladen?? Weil, ich bin delphi newbie und musste total viel öndern das es überhaupt irgendwie lief und ich denke ich hab einfach zu viel geöndert... :D
Danke!!!

quendolineDD 22. Okt 2007 19:19

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
So habe deine Bitte mal ausgeführt.
Bei mir klappt es.
In der zip befinden sich sämtliche Dateien, die Delphi beim Speichern anlegt.

War ja nicht schwer, nur Copy und Paste und nen Button auf die Form ziehen :\

Grüße

tomate007 23. Okt 2007 07:59

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Naja kla quendolineDD,

ist das leicht ^^ hab ich ja auch so gemacht ^^ nur bei mir liefs nicht ^^ :D

Ich probiere es mal aus, dankeeee

MFG
Andre

tomate007 5. Nov 2007 09:10

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Naja ich war selber schuld, es läuft!!! Also für alle der CODE IST EMPFEHLENSWERT!!!

Eine Frage hab ich noch wie kann ich mit diesem Code ein RadioButton belegen?? .Value geht nicht und .Click geht auch nicht... wie dann??


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 2  1 2      

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