2016-08-05 114 views
0

我在Delphi中使用TWebBrowser。 我需要帮助来获取HTML元素的位置。按位置获取HTML元素

我需要的元素是在一个框架中。使用elementFromPoint()

Document.elementFromPoint(X, Y) 

我越来越框架本身,但是不知道是它的内部。

我试图用这个来得到它:

WebBrowser.OleObject.Document.Frames 

但这种传输帧时,给了我一个访问错误。

回答

0

使用Document.elementFromPoint()是正确的方法。你没有考虑到的是HTML在一个分层的DOM树中被解析,并且不是递归的。

您正在要求浏览器的顶级文档在文档中的给定X,Y坐标处找到元素的直接子元素。在这种情况下,这是一个框架元素。

一个框架是一个嵌入窗口,用于存放另一个文档。您需要访问框架的Document并要求它在框架内的目标X,Y坐标处查找子元素。等等,直到你最终到达最底层的孩子。

注意elementFromPoint()需要客户坐标是相对于你在打电话elementFromPoint()文档的左上角。因此,当您要搜索子框架的Document时,需要先在框架的Document上调用elementFromPoint()之前从目标X,Y坐标中减去框架自己的左上角X,Y坐标(在其父文档中)。

+0

我怎样才能访问框架? 'WebBrowser.OleObject.Document.Frames' 这不起作用。访问错误。 – Alexey1245

+0

您已经可以从'elementFromPoint()'访问帧,它将返回实际的帧元素。你根本不需要使用'Document.Frames'。 –

+0

如何从框架中获取元素? '帧:= browser.elementFromPoint(X,Y); ... element:= frame.elementFromPoint(frame_x,frame_y);' – Alexey1245