![]() |
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?? |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Hi,
ist auch nicht so schwierig. Probiere es mal so:
Delphi-Quellcode:
Statt 'radio' musst du natürlich den korrekten Namen einsetzen.
frm.Elements.Item('radio').Checked := True;
Freundliche Grüße |
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 |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Du hast es fast richtig gemacht:
Delphi-Quellcode:
Wenn mehrere Elemente mit gleichem Namen existieren, dann musst du als zweiten Parameter einen Index angeben.
frm.Elements.Item('field_Orders_TypeOfAccounting', 0).Checked := True; // ohne Kostenschätzung
frm.Elements.Item('field_Orders_TypeOfAccounting', 1).Click; // mit detail. Kostenschätzung Viel Erfolg. |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
hi gibts da auch irgendwie etwas für "Delphi4 Standard"?
|
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Zitat:
|
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Zitat:
|
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Zitat:
![]() |
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
und wo kann ich dieses "Microsoft Internet Controls (Version 1.1)-AktiveX-Komponente" downloaden?
|
Re: Kann man mit Delphi Formulare im TWebbrowser füllen?
Zitat:
![]() |
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