AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Webbrowser OleObject - Felder füllen

Ein Thema von gee21 · begonnen am 9. Apr 2013 · letzter Beitrag vom 10. Apr 2013
Antwort Antwort
Seite 2 von 3     12 3      
nahpets
(Gast)

n/a Beiträge
 
#11

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:03
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:
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.
Allerdings nutze ich TWebBrowser und nicht tembeddedwb. Sollte dies die Ursache sein? Eigentlich ehre nicht.
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:14
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?)
Miniaturansicht angehängter Grafiken
1.png   2.png  
Robert

Geändert von gee21 ( 9. Apr 2013 um 23:20 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#13

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:19
Hallo,

vermutlich liegt das Problem nicht beim Ausfüllen der Felder an sich, sondern an:
Delphi-Quellcode:
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;
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.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:30
Hi Volker

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.
Robert

Geändert von gee21 ( 9. Apr 2013 um 23:35 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:33
Hallo,
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?)
Die beiden Fehler habe ich auch bekommen und ignoriert, da sie beim Laden der Seite auftreten, aber nicht beim Befüllen.

Kommentier bitte diese Zeile mal aus: webbrowser1.oleobject.document.forms.item(1).submit; Änderd sich dann was?
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#16

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:39
Hallo Robert,

warum gehst Du nicht über die URL, die Dir als Parameter übergeben wird. Werte doch einfach die aus anstatt Combobox2.ItemIndex

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:46
Zitat:
Die beiden Fehler habe ich auch bekommen und ignoriert, da sie beim Laden der Seite auftreten, aber nicht beim Befüllen.

Kommentier bitte diese Zeile mal aus: webbrowser1.oleobject.document.forms.item(1).submit; Änderd sich dann was?

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.htmlthen 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;
Robert
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#18

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:52
Hallo Robert,

ich meinte eigenlich
Delphi-Quellcode:
  if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.htmlthen
    begin
      [...]
    end
ich kenne die EmbeddeWB Komponente nicht, daher kann ich nicht sagen was in LocationURL drin steht.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#19

AW: Webbrowser OleObject - Felder füllen

  Alt 9. Apr 2013, 23:57
Hallo,

bin nochmal durch den Quelltext und dabei fiel mir auf, dass mal von 'Message' und mal von 'smsMessage' die Rede ist.

Delphi-Quellcode:
  FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
  FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
Die beiden mit FillForm zu befüllenden Felder kann ich in der HTML-Datei nicht finden. Habe ich da was übersehen?
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Webbrowser OleObject - Felder füllen

  Alt 10. Apr 2013, 00:02
Delphi-Quellcode:
///////////////// //////////////////////

if URL= 'http://www1.sunrise.ch/SMS-Sender-cbBpfAqFI.RUoAAAEwinJTNyCu-Sunrise-Residential-Site-WFS-de_CH-CHF.htmlthen 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:
Delphi-Quellcode:

FillForm(WebBrowser1, 'smsMessage', memo1.Text) ;
FillForm(WebBrowser1, 'SMSEingabe', edit3.Text) ;
Die beiden mit FillForm zu befüllenden Felder kann ich in der HTML-Datei nicht finden. Habe ich da was übersehen?
Das wird nur bei einem anderen Server so benötigt. (Den Server wähle ich mit der combobox2 aus)
Robert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03: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