AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Kann man mit Delphi Formulare im TWebbrowser füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Kann man mit Delphi Formulare im TWebbrowser füllen?

Ein Thema von tomate007 · begonnen am 18. Okt 2007 · letzter Beitrag vom 17. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#1

Kann man mit Delphi Formulare im TWebbrowser füllen?

  Alt 18. Okt 2007, 10:05
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 18. Okt 2007, 10:07
Bemühe mal die Forensuche.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
quendolineDD

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

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

  Alt 18. Okt 2007, 10:37
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ß
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#4

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

  Alt 20. Okt 2007, 00:03
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.
  Mit Zitat antworten Zitat
quendolineDD

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

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

  Alt 20. Okt 2007, 00:09
Hast du mal die absolute URL versucht? Also bis zu dem File der Loginform?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

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

  Alt 20. Okt 2007, 08:03
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
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#7

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

  Alt 20. Okt 2007, 23:34
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...
Danke!!!
  Mit Zitat antworten Zitat
quendolineDD

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

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

  Alt 22. Okt 2007, 20:19
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
Angehängte Dateien
Dateityp: zip twebbroser-dp_201.zip (3,4 KB, 29x aufgerufen)
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#9

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

  Alt 23. Okt 2007, 08:59
Naja kla quendolineDD,

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

Ich probiere es mal aus, dankeeee

MFG
Andre
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#10

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

  Alt 5. Nov 2007, 10:10
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??
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:42 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