![]() |
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
|
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; |
Re: Twebbrowser und Image klick... die xxx'te Variante
Danke, werde es morgen mal probieren, da ich heute nicht auf Arbeit bin.
|
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); .... |
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 |
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 |
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 ...
|
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. |
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. |
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. |
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