Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Twebbrowser und Image klick... die xxx'te Variante (https://www.delphipraxis.net/111189-twebbrowser-und-image-klick-die-xxxte-variante.html)

Der.Kaktus 1. Apr 2008 08:00

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Zitat:

Du kannst ja vorerst ausprobieren, ob es mit dieser Methode funktioniert.
D.h du bewegst den Mauszeiger über das Element und simulierst Enter.
Wo bekomme ich die Aktuelle Position des Elementes, damit ich Setcursorpos einsetzen kann?

toms 1. Apr 2008 08:16

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Du kannst mal mit folgendem Code spielen (Auszug aus meinem WinSpy)

Delphi-Quellcode:
var
   r: TRect;
   Element: IHTMLElement;

Delphi-Quellcode:
          r.Left := Element.offsetLeft;
          r.Top := Element.offsetTop;
          repeat
            Element := Element.offsetParent;
            if Element <> nil then
            begin
              if (Element.tagName = 'TD') // if parent a table cell,
                then
              begin
                r.Left := r.Left + (Element as IHTMLElement2).ClientLeft; // append cell border width to calcs
                r.Top := r.Top + (Element as IHTMLElement2).clientTop;
              end;
              r.Left := r.Left + Element.offsetLeft;
              r.Top := r.Top + Element.offsetTop;
            end;
          until Element = nil;

Der.Kaktus 1. Apr 2008 08:23

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Danke, werde es morgen mal probieren, da ich heute nicht auf Arbeit bin.

Der.Kaktus 2. Apr 2008 11:08

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Hallo, habe mit dem Code bissl rumgespielt aber ausser eine Zugriffsverletzung brachte es keinen Erfolg.

hier mal mein Codeschnippsel...vielleicht habe ich nen Denkfehler.

Delphi-Quellcode:
procedure TForm1.click_pic(s_pic:string);
var
  iDoc: IHtmlDocument2;
  i: integer;
  ov: OleVariant;
  iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  InputImage: HTMLInputImage;
  r: TRect;
  tp:TPoint;
  Element: IHTMLElement;

begin
  Wb.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
      i:=iColl.Get_length;
      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 pos(s_pic,InputImage.Name)<>0 then
          // if the name is submit / falls der name submit lautet
          begin
           inputimage.focus;
            //InputImage.click; // click it / klick es
           r.Left := Inputimage.offsetLeft;
           r.Top := Inputimage.offsetTop;
           element:=inputimage.offsetparent;
           repeat
            if Element <> nil then
            begin
               if (Element.tagName = 'TD') // if parent a table cell,
                then
               begin
                r.Left := r.Left + (Element as IHTMLElement2).ClientLeft; // append cell border width to calcs
                r.Top := r.Top + (Element as IHTMLElement2).clientTop;
               end;
              r.Left := r.Left + Element.offsetLeft;
              r.Top := r.Top + Element.offsetTop; // <----- hier geht er Heim steht auch im tagNamen nichts gescheites drin
             end;
           Element := Element.offsetParent;
           until Element = nil;
           tp.x:=r.Left+10;
           tp.y:=r.Top+10;
           wb.clienttoscreen(tp);
           windows.setcursorpos(tp.x,tp.y);
....

marabu 2. Apr 2008 11:34

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Hallo ihr beiden,

ein paar Fragen:

Das Image wird in jedem Fall gefunden?
Der Aufruf der Methode Click() scheitert?
Was genau funktioniert nicht?

Maßnahmen zur Aushebelung der Automatisierung werden auf der Client-Seite getroffen. Ist entsprechender Script-Code im HTML-Dokument vorhanden?

Nicht zuletzt: Stammt das Markup im Beitrag #1 aus einem Frame?

Freundliche Grüße

Der.Kaktus 2. Apr 2008 11:48

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Hallo marabu,

1: Image wird gefunden..Focus kann ich setzen
2: click scheitert
3: ich wollte nun probieren, den Mousecursor auf das Image zu setzen und einen Mouseclick zu simulieren. Leider scheitert es noch bei Positionsfindung.
4: nur das CGI ..kein Frame

marabu 2. Apr 2008 12:02

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Dann sollte es dir gelingen die firmenspezifischen Teile der Seite zu entfernen, so dass mit der abgespeckten Seite das Verhalten nachgestellt werden kann. Es ist dann viel leichter zu helfen ...

Der.Kaktus 2. Apr 2008 12:59

Re: Twebbrowser und Image klick... die xxx'te Variante
 
@marabu
habe eben mal eine Variante getestet(ohne das cgi)..da geht click()..scheint doch im CGI abgefangen zu werden.Also doch die Variante mit Mouseposition und dann Mouseclick.

marabu 2. Apr 2008 14:09

Re: Twebbrowser und Image klick... die xxx'te Variante
 
Wenn die Art der Benutzer-Interaktion im CGI behandelt werden soll, dann muss der Klick vorher ausgelöst worden sein und zu einem HTTP-Request geführt haben.

Wenn eine Server-Erweiterung (CGI, FastCGI, ISAPI, ...) auf die Art der Benutzer-Interaktion reagieren soll, dann benötigt sie ein per POST-Variable oder HTTP-Header übermitteltes Kriterium. Du könntest also den Request testweise auf einen eigenen Server umleiten, damit du die übermittelten Werte untersuchen kannst.

Wenn du keine unverfängliche Testseite zur Verfügung stellen kannst, dann ist leider keine gezielte Hilfe von außen möglich.

Der.Kaktus 2. Apr 2008 14:57

Re: Twebbrowser und Image klick... die xxx'te Variante
 
@marabu
Wie auf meinem HTML Auszug ersichtlich ist, wird ueber eine "post" Variable ein CGI Servererweiterung aufgerufen. An diese Datei komme ich aber leider nicht ran. Danke trotzdem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr.
Seite 2 von 4     12 34      

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