2016-08-05 26 views
0

Ich verwende TWebBrowser in Delphi. Ich brauche Hilfe, um ein HTML-Element nach seiner Position zu bekommen.Holen HTML-Element nach Position

Das Element, das ich brauche, ist in einem Rahmen. elementFromPoint() Mit:

Document.elementFromPoint(X, Y) 

Ich erhalte den Rahmen selbst, aber nicht, was in ihm ist.

Ich versuchte es mit diesem zu bekommen:

WebBrowser.OleObject.Document.Frames 

Aber das gibt mir einen Zugriffsfehler, wenn Frames übertragen.

Antwort

0

Mit Document.elementFromPoint() ist der richtige Ansatz. Was Sie nicht berücksichtigen, ist, dass der HTML-Code in einer hierarchischen DOM-Baumstruktur geparst wird und elementFromPoint() nicht rekursiv ist.

Sie bitten das oberste Dokument des Browsers, ein unmittelbar untergeordnetes Element an einer gegebenen X, Y-Koordinate innerhalb des Dokuments zu finden. In diesem Fall ist das ein Rahmenelement.

Ein Rahmen ist ein eingebettetes Fenster, das ein anderes Dokument enthält. Sie müssen auf das Dokument des Rahmens zugreifen und es anfordern, um ein untergeordnetes Element an der Ziel-X-, Y-Koordinate innerhalb des Rahmens zu finden. Und so weiter und so weiter, bis du schließlich das unterste Kind erreichst.

Beachten Sie, dass elementFromPoint()Client Koordinaten nimmt, die an der linken oberen Ecke des Dokuments über die Sie anrufen elementFromPoint() relativ sind. Wenn Sie also das Dokument eines Child-Frames durchsuchen möchten, müssen Sie zuerst die X-Y-Koordinate (innerhalb des übergeordneten Dokuments) des Frames von der X- und Y-Zielkoordinate subtrahieren, bevor Sie elementFromPoint() im Dokument des Frames aufrufen.

+0

Wie kann ich auf den Rahmen zugreifen? 'WebBrowser.OleObject.Document.Frames' dies funktioniert nicht. Zugriffsfehler – Alexey1245

+0

Sie haben bereits Zugriff auf den Rahmen von 'elementFromPoint()', es gibt das eigentliche Rahmenelement zurück. Sie müssen 'Document.Frames' überhaupt nicht verwenden. –

+0

Wie bekomme ich das Element aus dem Rahmen? 'frame: = browser.elementFromPoint (x, y); ... element: = frame.elementFromPoint (frame_x, frame_y); ' – Alexey1245