![]() |
Twebbrowser und Image klick... die xxx'te Variante
Hallo DP'ler,
habe folgende HTML Seite und wuerde gern ein Image per Fernsteuerung druecken. Habe natuerlich vorher in der DP usw. alle Varianten ausprobiert aber leider ohne Erfolg bei "Image.click"."Focus" setzen geht..aber eben nicht klicken. Hat jemand ne Idee? Danke im voraus! ..... <div id="Layer1" style="position:absolute; left:78px; top:131px; width:460px; height:210px; z-index:3"> <form method="post" action="../cgi-bin/htm_term.cgi"> <table width="100%" align="center" background=""> <tr> ......... </tr> <tr> <td height="19"><center><input type=image src="../images/f1.gif" width="45" height="45" alt="Funktion 1" name="funktion1"></center></td> <td height="19"><center><input type=image src="../images/f2.gif" width="45" height="45" alt="Funktion 2" name="funktion2"></center></td> <td height="19"><center><input type=image src="../images/f3.gif" width="45" height="45" alt="Funktion 3" name="funktion3"></center></td> </tr> </table> </form> </div> |
Re: Twebbrowser und Image klick... die xxx'te Variante
Hallo,
Hast du schon mal meine WB_ClickImage aus dem ![]() Aufruf:
Delphi-Quellcode:
WB_ClickImage(Webbrowser1,'f1.gif');
Delphi-Quellcode:
procedure WB_ClickImage(WB: TWebbrowser; ImageSRC: string);
var iDoc: IHtmlDocument2; i: Integer; iDisp: IDispatch; iColl: IHTMLElementCollection; InputImage: HTMLInputImage; begin if Assigned(WB.Document) then begin WB.Document.QueryInterface(IHTMLDocument2, iDoc); if Assigned(iDoc) then begin iDisp := iDoc.all.tags('INPUT'); if Assigned(iDisp) then begin iDisp.QueryInterface(IHTMLElementCollection, iColl); if Assigned(iColl) then begin ImageSRC := AnsiUpperCase(ImageSRC); for i := 1 to iColl.Get_length do begin iDisp := iColl.item(Pred(i), 0); iDisp.QueryInterface(HTMLInputImage, InputImage); if Assigned(InputImage) then begin if Pos(ImageSRC, AnsiUpperCase(InputImage.src)) <> 0 then begin InputImage.Click; end; end; end; end; end; end; end; end; |
Re: Twebbrowser und Image klick... die xxx'te Variante
Jep, habe ich...geht nicht..auch die 2. Variante, die ich hier fand, kein Erfolg. Schneide ich aber Tastatur/Maus mit (winmacro) geht es. Aber dies Moeglichkeit moechte ich nicht.
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
Könntest du den gesamten relevanten Code anhängen, so dass ich es testen kann? |
Re: Twebbrowser und Image klick... die xxx'te Variante
Kann ich leider nicht..iss Firmenintern...aber ich denke, die ham das im CGI abgeblockt..geht sowas?..die Events Onmouseclick Onmouseup etc. sind aber NIL.
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
|
Re: Twebbrowser und Image klick... die xxx'te Variante
hab ich schon versucht und sogar "Space"..funktioniert aber nicht :(
Irgendwas ham die reinprogrammiert die Schlingel *gg* |
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Jep, koennte sein..wie bekomm ich die dahin? Setcursorpos? ..Aber wo erhalte ich die Position des Elementes? Danke erstmal fuer Deine Muehe!!
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
D.h du bewegst den Mauszeiger über das Element und simulierst Enter. |
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. |
Re: Twebbrowser und Image klick... die xxx'te Variante
Liegt hier ein Missverständnis vor? Niemand benötigt das CGI-Modul, es genügt die anonymisierte HTML-Datei, mit der sich das Verhalten nachstellen lässt. Ein passendes CGI-Modul kann ich mir zur Not selbst bauen.
|
Re: Twebbrowser und Image klick... die xxx'te Variante
@toms kannst Du mal bitte den Quelltext anschauen mit dem Ausschnitt aus Deinem Winspy?..Danke
@marabu es liegt sicher ein Missverstaendnis vor...der Ausschnitt am Anfang dieses Threads ist die HTML Quelle ohne interne Texte... mehr ist nicht...die Variante, ohne CGI, da funktioniert auch die Image.click() Prozedure ..deshalb wohl doch die Variante mit Mouseclick nehmen muss.Danke |
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
|
Re: Twebbrowser und Image klick... die xxx'te Variante
@toms Guten Morgen,
habe rumgespielt (siehe Beitrag #14)...bekomme aber beim 1.OffsetParent keinen tagnamen?? |
Re: Twebbrowser und Image klick... die xxx'te Variante
//Edit gelöscht
|
Re: Twebbrowser und Image klick... die xxx'te Variante
habe die Befuerchtung, irgendwie werden die Parentparameter zwar gesetzt, aber die Adressen sind nicht richtig. Habe ich Denkfehler oder ist es ein Bug? :wall:
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Hallo,
Konntest du diese Methode denn erfolgreich testen bevor du die Element Position per Code berechnest? Test: - Die Maus manuell über den Submitbutton bewegen. - z.B via Hotkey die Linke Maustaste simulieren. Somit wirst du sehen, ob der Ansatz überhaupt funktionieren würde. |
Re: Twebbrowser und Image klick... die xxx'te Variante
Zitat:
Guten Morgen, Ja, funktioniert mit Hotkey und manueller Positionierung...eben erfolgreich getestet!! |
Re: Twebbrowser und Image klick... die xxx'te Variante
Delphi-Quellcode:
Ist es richtig, dass Element.offsetLeft noch korrekt ausgeführt wird und einen Wert zurück gibt; Element.offsetTop aber nicht?
r.Left := r.Left + Element.offsetLeft;
r.Top := r.Top + Element.offsetTop; // <----- hier geht er Heim steht auch im tagNamen nichts gescheites drin |
Re: Twebbrowser und Image klick... die xxx'te Variante
Ja,aber nur zufaellig weil da gerade ein Wert steht....die ganze Struktur des Zeigers stimmt nicht..im Element.tagName steht schon nichts(Irgendwelcher Speicher)drin.
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Delphi-Quellcode:
ich denke, diese Zuweisung ist problematisch. Die Typen stimmen nicht überein.
element:=inputimage.offsetparent;
|
Re: Twebbrowser und Image klick... die xxx'te Variante
Problem geloest!
Delphi-Quellcode:
Var Element:IHTMLElement;
// ersetzt element=inputimage.offsetparent wegen fehlerhaften Zeiger'n element:=idoc.activeElement.offsetParent // nach vorheriger Focusierung des gewuenschten Elementes Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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