Delphi-PRAXiS

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??

marabu 5. Nov 2007 09:24

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

ist auch nicht so schwierig. Probiere es mal so:

Delphi-Quellcode:
frm.Elements.Item('radio').Checked := True;
Statt 'radio' musst du natürlich den korrekten Namen einsetzen.

Freundliche Grüße

tomate007 5. Nov 2007 09:34

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
he da haste mir so viel Hoffnung gemacht ^^ aber es kommt folgender Fehler Methode Checked wird vom Automatisierungsobjekt nicht unterstützt.
Naja und der Prozess wurde natürlich angehalten :D

Hier mal der Sourcecode der Radioboxen:

<input id="field_Orders_TypeOfAccounting" name="field_Orders_TypeOfAccounting" value="repair_without_estimate">ohne Kostenschätzung
<input id="field_Orders_TypeOfAccounting" name="field_Orders_TypeOfAccounting" value="repair_with_estimate">mit detaillierter Kostenschätzung (kostenpfl.)
<input id="field_Orders_TypeOfAccounting" name="field_Orders_TypeOfAccounting" value="repair_with_estimate_from_limit">mit Kostenschätzung ab Betrag €

ich möchte das 1. anklicken lassen also mit dem value repair_without_estimate. Wie mach ich das?! :D ich hab echt kein Plan mehr, ansonsten läuft mein Prog super :D

hier mal den Code den ich nach deinem Beispiel gemacht habe.

frm.Elements.Item('field_Orders_TypeOfAccounting') .Checked := true;

aber wie gesagt... es will nicht ^^

Danke für die Hilfe

MFG
Andre

marabu 5. Nov 2007 10:45

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Du hast es fast richtig gemacht:

Delphi-Quellcode:
frm.Elements.Item('field_Orders_TypeOfAccounting', 0).Checked := True; // ohne Kostenschätzung
frm.Elements.Item('field_Orders_TypeOfAccounting', 1).Click; // mit detail. Kostenschätzung
Wenn mehrere Elemente mit gleichem Namen existieren, dann musst du als zweiten Parameter einen Index angeben.

Viel Erfolg.

Mokuba01 17. Nov 2007 17:51

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
hi gibts da auch irgendwie etwas für "Delphi4 Standard"?

API 17. Nov 2007 17:55

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Zitat:

Zitat von Mokuba01
hi gibts da auch irgendwie etwas für "Delphi4 Standard"?

Meinst du den TWebbrowser?

Mokuba01 17. Nov 2007 17:57

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Zitat:

Zitat von API
Zitat:

Zitat von Mokuba01
hi gibts da auch irgendwie etwas für "Delphi4 Standard"?

Meinst du den TWebbrowser?

ich meine generell alles den TWebBrowser die Variants.dcu halt alles was Delphi4 Standard nicht hat

API 17. Nov 2007 18:13

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Zitat:

Zitat von Mokuba01
Zitat:

Zitat von API
Zitat:

Zitat von Mokuba01
hi gibts da auch irgendwie etwas für "Delphi4 Standard"?

Meinst du den TWebbrowser?

ich meine generell alles den TWebBrowser die Variants.dcu halt alles was Delphi4 Standard nicht hat


Internet Explorer ActiveX-Komponente nutzen

Mokuba01 17. Nov 2007 18:23

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
und wo kann ich dieses "Microsoft Internet Controls (Version 1.1)-AktiveX-Komponente" downloaden?

API 17. Nov 2007 18:32

Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
 
Zitat:

Zitat von Mokuba01
und wo kann ich dieses "Microsoft Internet Controls (Version 1.1)-AktiveX-Komponente" downloaden?


http://www.delphipraxis.net/internal...ct.php?t=21524


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