Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi twebbrowser auf einen button klicken... (https://www.delphipraxis.net/93558-twebbrowser-auf-einen-button-klicken.html)

gandime 7. Jun 2007 12:56


twebbrowser auf einen button klicken...
 
Hi,
ich möchte auf einen Butten klicken, im Webbrowser klicken.
html code:
Code:
<input type="image" src="../login.jpg" alt="Login" class="loginButton" name="button" id="button" onmouseover="document.getElementById('button').src='../login2.jpg';" onmouseout="document.getElementById('button').src='../login.jpg';">
Dieser Button befindet sich in einem Frame namens "mainframe".
Bis jetzt habe ich folgendes versucht:
Direkt über den (oder das?) Frame auf den Dutton zu klicken
Delphi-Quellcode:
Web.OleObject.Document.Frames.item('mainframe').Document.Forms.item(0).Elements.item('button').click;
Dann habe ich erst den Frame geladen und dann habe ich versucht auf den button zu klicken:
Delphi-Quellcode:
doc := Web.Document as IHTMLDocument3;
doc.getElementsByName('button').click;
Danach habe ich noch versucht auf das Bild zu klicken...
Delphi-Quellcode:
for i:=0 to WebBrowser.OleObject.Document.Images.length-1 do
begin
  WebBrowser.OleObject.Document.Images.Item(i).click;
end;
und das selbe nochmal direkt über den Frame!

Das alles hat aber nicht funktioniert...
warum?

mfg
gandime

WebtoolMaster 8. Jun 2007 14:33

Re: twebbrowser auf einen button klicken...
 
Hallo,

schau dir bitte Indy an.
Mit TWebbrowser hatte ich auch meine Probleme.
Punkto: hängen bleiben, manchmal ging es nicht, ...

gandime 10. Jun 2007 01:32

Re: twebbrowser auf einen button klicken...
 
ja nee mit idhttp is das prob das die seite nicht geladen wird sonder nur der quellcode angezeigt wird was mir nichts bringt wenn ich nur verschlüsselten text sehe...

marabu 10. Jun 2007 08:25

Re: twebbrowser auf einen button klicken...
 
Guten Morgen.

Zitat:

... Das alles hat aber nicht funktioniert ...
Mich würde interessieren, was genau passierte. Gab es Fehlermeldungen?

Wie hast du sicher gestellt, dass die Seite vollständig geladen wurde, bevor du die Methode Click des Images aufrufst?

Der gezeigte Code sieht für sich genommen nicht verdächtig aus.

Grüße vom marabu

gandime 10. Jun 2007 11:57

Re: twebbrowser auf einen button klicken...
 
also hier mal mein code:

Delphi-Quellcode:
  begin
  Web.navigate('http://xyz.de/');
  if warten then
  begin
    Web.OleObject.Document.Frames.item('mainframe').Document.Forms.item(0).Elements.item('login').value:='user';
    Web.OleObject.Document.Frames.item('mainframe').Document.Forms.item(0).Elements.item('pass').value:='pw';
    showmessage(inttostr(Web.OleObject.Document.Images.Length)); // ergebnis: 0
  end;
end;

function TForm1.warten:boolean;
begin
  repeat
    Sleep(50);
    Application.ProcessMessages;
  until (b_web_f=true) or (Application.Terminated);
  b_web_f:=false;
  result:=true;
end;

procedure TForm1.WebDocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  CurWebrowser: IWebBrowser;
  TopWebBrowser: IWebBrowser;
begin
  b_web_f:=false;
  CurWebrowser := pDisp as IWebBrowser;
  TopWebBrowser := (ASender as TWebBrowser).DefaultInterface;
  if CurWebrowser = TopWebBrowser then
  begin
    b_web_f:=true;
    showmessage('haupt');
  end
  else
  begin
//    showmessage('sub');
  end;
end;
joa iwie komme ich nicht weiter...

marabu 10. Jun 2007 12:59

Re: twebbrowser auf einen button klicken...
 
Hallo,

warum kombinierst du Busy Waiting mit dem Browser Event OnDocumentComplete()? Du brauchst eigentlich nur eines von beidem und das Event ist dabei die elegantere Lösung. Aber auch wenn du Busy Waiting bevorzugst, benötigst du keine globale Variable b_web_f - die Komponente TWebBrowser stellt dir bereits die Eigenschaft ReadyState zur Verfügung.

Bei deinem aktuellen Code musst du unbedingt darauf achten, dass b_web_f beim ersten Aufruf der Funktion Warten() auf False initialisiert ist, da sonst einfach nur 50 Millisekunden gewartet wird und dann auf die noch nicht fertige Seite zugegriffen wird. Diese Initialisierung würde ich dann beim Ereignis OnBeforeNavigate2() erledigen, aber noch besser geht es ganz ohne diese Variable.

Welcher Fehler kommt den nun bei dir - und an welcher Stelle?

Freundliche Grüße

gandime 10. Jun 2007 18:27

Re: twebbrowser auf einen button klicken...
 
es kommt kein fehler ich weiss blos nicht wie ich den oben beschiebenen Button anklicke!

marabu 10. Jun 2007 19:06

Re: twebbrowser auf einen button klicken...
 
Hallo,

wenn es nur um das Auslösen der Form-Action geht, dann schau mal im Thread image submit druecken vorbei - mir scheint, dass dein Fall ähnlich gelagert ist.

Freundliche Grüße

gandime 10. Jun 2007 19:31

Re: twebbrowser auf einen button klicken...
 
damit geht es auch nicht
ab
Delphi-Quellcode:
procedure TForm1.click_pic(s_pic:string);
var
  iDoc: IHtmlDocument2;
  i: integer;
  ov: OleVariant;
  iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  InputImage: HTMLInputImage;
begin
  Web.ControlInterface.Document.QueryInterface(IHtmlDocument2, iDoc);
  if not Assigned(iDoc) then
  begin
    Exit;
  end;
  ov := 'INPUT';
  iDisp := iDoc.all.tags(ov);
  if Assigned(IDisp) then
  begin
    IDisp.QueryInterface(IHTMLElementCollection, iColl);
    if Assigned(iColl) then
    begin
      for i := 1 to iColl.Get_length do //iColl.Get_length=0 worduch es nicht weiter geht
      begin
        iDisp := iColl.item(pred(i), 0);
        iDisp.QueryInterface(HTMLInputImage, InputImage);
        if Assigned(InputImage) then
        begin
          if InputImage.Name=s_pic then
          // if the name is submit / falls der name submit lautet
          begin
            InputImage.Click; // click it / klick es
          end;
        end;
      end;
    end;
  end;
end;
dem punkt geht es nicht weiter

edit:
habs erst mit der ganzen Seite versucht wenn ich direkt den Frame lade geht es


danke :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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