![]() |
AW: Webbrowser OleObject - Felder füllen
Hallo,
habe mal rumprobiert. Dazu habe ich die von Dir zur Verfügunggestellte HTML-Seite lokal abgespeichert. Mit folgendem Quelltext bekomme ich den Inhalt von Memo1.Text in das Formular:
Delphi-Quellcode:
Allerdings nutze ich TWebBrowser und nicht tembeddedwb. Sollte dies die Ursache sein? Eigentlich ehre nicht.
unit ClientUnit1;
interface uses SysUtils, Dialogs, Forms,OleCtrls, SHDocVw, Classes, Controls, StdCtrls, StrUtils; type TForm1 = class(TForm) Button1: TButton; wb: TWebBrowser; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean; procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} // ...HTML Formulare mit TWebBrowser automatisch ausfüllen lassen? function TForm1.WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean; var i, j: Integer; FormItem: Variant; begin Result := False; //no form on document if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; //count forms on document for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin FormItem := wb.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try // when the fieldname is found, try to fill out if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin FormItem.Item(j).Value := sValue; Result := True; end; except Exit; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Application.ProcessMessages; while wb.Busy do Application.ProcessMessages; while wb.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if not WBFillForm(wb,'message',Memo1.Text) then begin ShowMessage('Das Textfeld message wurde nicht gefunden.'); end; Application.ProcessMessages; while wb.Busy do Application.ProcessMessages; while wb.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; end; procedure TForm1.Button2Click(Sender: TObject); begin wb.Navigate('E:\Delphi\WebModule\test.html'); ShowMessage('***'); end; end. |
AW: Webbrowser OleObject - Felder füllen
Liste der Anhänge anzeigen (Anzahl: 2)
Ok. Ich habe jetzt auch den Twebbrowser genommen. Und dein Code kopiert. Es geht immer noch nicht "Feld wurde nicht gefunden".
Aber beim Twebbrowser erscheinen mir beim laden 2 Script Fehler könnte es irgendwie an dem liegen? Ich glaube ich könnte diese ja ignorieren (aber evt passiert ja da der fehler?) |
AW: Webbrowser OleObject - Felder füllen
Hallo,
vermutlich liegt das Problem nicht beim Ausfüllen der Felder an sich, sondern an:
Delphi-Quellcode:
Das submit sendet die Daten an den Server, der Server antwortet, es wird erneut TForm1.WebBrowser1DocumentComplete aufgerufen, combobox2.ItemIndex hat noch immer den Wert 1, der Versuch loginform_login mit einem Wert zu befüllen scheitert.
procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin // [...] if combobox2.ItemIndex = 1 then begin repeat; application.processmessages; sleep(1); until webbrowser1.readystate=4; try webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_login').value := memo2.lines[2]; except end; if webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_login').value =memo2.lines[2] then begin webbrowser1.oleobject.document.forms.item(1).elements.item('loginform_password').value := memo2.lines[3] ; webbrowser1.oleobject.document.forms.item(1).submit; // <-- HIER liegt wohl das Problem end; //server1 ende end; end; Gruß |
AW: Webbrowser OleObject - Felder füllen
Hi Volker :-D
Genau das habe ich auch gerade gedacht. Darum hab ich gerade so abgeändert:
Delphi-Quellcode:
///////////////// //////////////////////
if combobox2.ItemIndex=1 then begin combobox2.ItemIndex:=0; repeat; Application.ProcessMessages; Sleep(1); until WebBrowser1.ReadyState=4; webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2]; if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ; webbrowser1.oleobject.document.forms.item(1).submit; end; //Server1 ENDE end; So dürfte der abschnitt ja nur 1x durchgeführt werden. Aber leider gleicher Effekt. |
AW: Webbrowser OleObject - Felder füllen
Hallo,
Zitat:
Kommentier bitte diese Zeile mal aus:
Delphi-Quellcode:
Änderd sich dann was?
webbrowser1.oleobject.document.forms.item(1).submit;
|
AW: Webbrowser OleObject - Felder füllen
Hallo Robert,
warum gehst Du nicht über die URL, die Dir als Parameter übergeben wird. Werte doch einfach die aus anstatt Combobox2.ItemIndex Gruß |
AW: Webbrowser OleObject - Felder füllen
Zitat:
Habe die fehler nun auch ignoriert. Und den .submit Befehl deaktiviert (mit //). Dadurch musste ich den Login Knopf selber drücken. Aber leider füllte er auch nachher nicht das Feld aus. (Feld nicht gefunden) @Volker: Etwa so: (hilft aber auch nichts)
Delphi-Quellcode:
if webbrowser1.LocationURL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin
repeat; Application.ProcessMessages; Sleep(1); until WebBrowser1.ReadyState=4; webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2]; if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ; webbrowser1.oleobject.document.forms.item(1).submit; end; //Server1 ENDE end; |
AW: Webbrowser OleObject - Felder füllen
Hallo Robert,
ich meinte eigenlich
Delphi-Quellcode:
ich kenne die EmbeddeWB Komponente nicht, daher kann ich nicht sagen was in LocationURL drin steht.
if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then
begin [...] end Gruß |
AW: Webbrowser OleObject - Felder füllen
Hallo,
bin nochmal durch den Quelltext und dabei fiel mir auf, dass mal von 'Message' und mal von 'smsMessage' die Rede ist.
Delphi-Quellcode:
Die beiden mit FillForm zu befüllenden Felder kann ich in der HTML-Datei nicht finden. Habe ich da was übersehen?
FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ; |
AW: Webbrowser OleObject - Felder füllen
Delphi-Quellcode:
///////////////// //////////////////////
if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.html' then begin repeat; Application.ProcessMessages; Sleep(1); until WebBrowser1.ReadyState=4; webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value := memo2.Lines[2]; if webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Login').value =memo2.Lines[2] then begin webbrowser1.oleobject.document.forms.item(1).elements.item('LoginForm_Password').value := memo2.Lines[3] ; //webbrowser1.oleobject.document.forms.item(1).submit; end; //Server1 ENDE end; Geht Leider auch so nicht immer das gleiche... (Habe übrigens jetzt wieder den normalen Webbrowser genommen. So zu Sicherheit aber es macht eben auch keinen Unterschied) Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 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