使用 Chromium/WebKit 从页面获取 DOM

Getting DOM from page using Chromium/WebKit

提问人:muckabout 提问时间:7/14/2010 最后编辑:muckabout 更新时间:1/27/2017 访问量:5799

问:

尝试在渲染后访问页面的 DOM。我不需要查看页面并计划在没有任何 GUI 或交互的情况下以编程方式应用它。

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

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

简单地说,我会对这样的伪代码感兴趣:

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

关于起点有什么提示吗?

WebKit

评论

0赞 msw 7/14/2010
“渲染后的 DOM”是什么意思,因为 DOM 将是相同的,但渲染的页面会复杂得多。Chrome/Chromium 已经具有使用开发人员工具→ Elements 生成计算页面的编程能力,并且 Chromium 是开源的,因此您可能需要查看那里。
0赞 muckabout 7/14/2010
更新以回答您的问题,谢谢!我将查看开发工具,但我相信一些小的示例代码一定是可能的

答:

5赞 Emerick Rogul 7/19/2010 #1

应使用 Chromium 公开的 Web API 包装器;具体而言,WebDocument 类包含所需的功能。你可以这样称呼它:

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

// Manipulate the DOM here using docElement
...

您可以在此处浏览 Chromium 的 Web API 包装器的源代码。虽然没有太多的文档,但头文件的注释相当好,您可以浏览 Chrome 的源代码以查看 API 的实际应用。

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

评论

0赞 Yi H. 2/23/2012
Chromium 源代码链接已移至此处