![]() |
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 |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Bemühe mal die
![]() |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Jop, das geht und ist auch garnicht schwer ;)
Delphi-Quellcode:
Beispielcode ist von
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. ![]() Viel Spaß |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Danke quendolineDD,
der Code ist super.. mit dem Beispiel ![]()
Delphi-Quellcode:
und
const
url = 'http://xxxxxx.de/login/login_form';
Delphi-Quellcode:
kommt folgende Fehlermeldung beim klicken auf den Button:
frm.Elements.Item('__ac_name').Value := 'test';
frm.Elements.Item('__ac_password').Value := 'test'; frm.Elements.Item('submit').Click; Zitat:
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. |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Hast du mal die absolute URL versucht? Also bis zu dem File der Loginform?
|
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:
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.
// ...
frm := doc.Forms.Item(0); // get handle of first form on page // ... Grüße vom marabu |
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:
aber es muss rein theoretisch an der internetseite liegen, da es bei allen anderen geht.
repeat
Sleep(50); Application.ProcessMessages; until wb.ReadyState >= READYSTATE_COMPLETE; 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!!! |
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 |
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 |
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 12:56 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