2010-07-13 32 views
4

试图在呈现后访问页面的DOM。我不需要查看页面,并计划在没有任何GUI或交互的情况下以编程方式应用此页面。使用Chromium/WebKit从页面获取DOM

我对后期渲染感兴趣的原因是我想知道对象在哪里出现。一些位置信息被编码在HTML中(例如,通过offsetLeft),但很多不是。另外,Javascript可以改变最终的定位。我希望职位尽可能接近用户将会看到的位置。

我已经看过Chromium代码,并认为有一种方法可以做到这一点,但没有足够的文档开始。

把它非常只是我很想在这样的伪代码:

DOMRoot *r = new Page("http://stackoverflow.com")->getDom(); 

任何提示上的出发点?

+0

“渲染后的DOM”意味着什么,因为DOM将会是相同的,但渲染后的页面会变得非常复杂。 Chrome/Chromium已具备使用开发人员工具→Elements和Chromium开源软件生成计算出的页面的编程功能,因此您可能需要在此处查看。 – msw 2010-07-13 16:53:28

+0

已更新回复您的问题,谢谢!我会检查开发工具,但我相信一些小的示例代码必须是可能的 – muckabout 2010-07-13 17:43:33

回答

5

您应该使用Chromium公开的Web API封装器;具体来说,WebDocument类包含您需要的功能。你可以这样调用:

WebFrame * mainFrame = webView->mainFrame(); 
WebDocument document = mainFrame->document(); 
WebElement docElement = document->docElement(); 

// Manipulate the DOM here using docElement 
... 

You can browse the source code for Chromium's Web API wrapper here.虽然不是在文件的方式很多,头文件是相当良好注释,你可以浏览Chrome的源代码,在行动中看到的API。

开始使用Chromium很困难。我建议看看​​。此外,像Chromium Embedded Framework(CEF)这样的框架简化了在您的应用程序中嵌入Chromium的过程;我在当前的项目中使用CEF,对此我非常满意。

+0

铬源代码链接被移动[here](http://trac.webkit.org/browser/trunk/Source/WebKit/chromium /上市)。 – 2012-02-23 08:29:15

+0

感谢您指出了这一点;我更新了链接。 – 2012-02-23 15:28:27