论文部分内容阅读
摘要:对基于IE内核(如IE,Maxthon)与基于Gecko内核(如Firefox)的浏览器的网页内容获取与分析的技术进行了研究,采用Visual C 6.0为平台,基于COM技术和微软的MSAA技术,采用了多种方式实现了基于以上两类不同内核的浏览器的网页内容获取,并对这几种获取方式进行了优劣比较。
关键词:COM; DOM; MSAA; IE; Gecko; windows编程
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-936-04
The Research of the Technique of Capturing and Analyzing the Web Page Contents Based on the Kernel of IE and Gecko
ZHOU Zhou
(College of Software Engineering, Beijing Jiao Tong University, Beijing 100044, China)
Abstract: With the instant development of World Wide Web, it becomes important to capture and analyze the web page contents in order to give the customers information better arranged. This article did a research in several ways and techniques which can capture and analyze the web pages by using the Visual C 6.0, on the basis of COM and MSAA. At last the article compared all the techniques and listed distinctly their advantages and disadvantages.
Key words: COM; DOM; MSAA; IE; Gecko; windows programming
1 引言
随着互联网的迅猛发展,如今我们面对的是一个包罗万象的网络世界,面对浩如烟海的信息,如何有效地提取网页信息成了一个十分重要的课题。如果掌握了相关的网页内容获取技术,将可以进行多方面的拓展活动,比如实时网页内容审查过滤、用户浏览行为分析、用户浏览网站的实时统计、网页自动化测试、为残疾人士浏览网页提供辅助功能。以上许多活动中都可能隐藏着很多潜在的商机。
2 关键概念
2.1 组件技术(COM)
简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C 不同,它提倡源代码重用。COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C 中的命名修饰)。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。
2.2 MSAA (Microsoft? Active Accessibility)
Microsoft? Active Accessibility 是一种相对较新的技术。目的是方便身患残疾的人士使用电脑——可用于放大器、屏幕阅读器,以及触觉型鼠标。同样还可以用来开发驱动其它软件的应用程序,其模拟用户输入的能力尤其适合测试软件的开发。
Active Accessibility 的主要思想是提供一种以程序方式访问UI元素信息或操作这些UI元素的功能。支持这种功能的 UI(User Interface) 元素是可访问的。在大多数情况下,这意味着一个UI元素支持 IAccessible 接口。你也可以说在 Active Accessibility 的世界里,一个可访问的UI元素可表示为 IAccessible 接口。每当你需要得到有关一个元素的信息,在其上执行一个动作,或者使用 Active Accessibility 做其它的什么,你通常需要通过使用代表这个元素的 IAccessible 接口的一种方法或者属性来引用这个元素。
2.3 GUID (Globally Unique Identifier)
GUID(全球唯一标示符——Globally Unique Identifier)是个128位的数字。它是一种独立于COM编程语言的标示方法。每一个接口和coclass有一个GUID。因为每一个GUID都是全球唯一的,所以避免了名字冲突(只要你用COM API创建它们)。有时你还会碰到另一个术语UUID(意思也是全球唯一标示符——universally unique identifier)。UUIDs和GUIDs在实际使用时的用途是一样的。
3 程序实现
3.1 IE内核浏览器网页内容获取与分析(基于COM技术)
上述基于窗口遍历的技术有十分大的缺陷,无法对网页内容进行访问,而且更为严重的是,当前几乎所有的浏览器都支持标签式的浏览,如果采用上述的方法只能访问当前激活的标签。鉴于以上原因,我们采用COM技术来进行实现,这里的关键就是取得每个网页的IHTMLDocument2接口,这个接口封装了众多的方法,我们完全可以用它来进行丰富的二次开发。
这里引入一个windows编程中的对象Shell Windows Object。通俗来说,shell就是用户和操作系统交互的一个接口,也就是接收和返回信息的一个通道;比如说windows操作系统中的explorer.exe,也就是桌面任务栏就是一个shell,如果通过任务管理器结束explorer.exe进程,桌面任务栏也就随之没有了。每一个网页就是一个Shell Windows Object,我们通过枚举所有的Shell Windows Object并试图获得其IHTEMLDocument2接口指针,如果成功说明这个Shell Windows Object是一个HTML容器,我们就可以通过其封装的方法进行操作。
这里使用COM技术来取得所有网页的URL,具体程序如下:
CComPtr <IShellWindows> spShellWin;// 定义智能指针
CoInitialize(NULL);// 初始化COM库
HRESULT hr =spShellWin.CoCreateInstance(CLSID_ShellWindows);// 根据指定CLSID创建一个未初始化的对象
if (FAILED(hr)) return;
long nCount=0;
char URL[2000];
spShellWin->get_Count(
关键词:COM; DOM; MSAA; IE; Gecko; windows编程
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-936-04
The Research of the Technique of Capturing and Analyzing the Web Page Contents Based on the Kernel of IE and Gecko
ZHOU Zhou
(College of Software Engineering, Beijing Jiao Tong University, Beijing 100044, China)
Abstract: With the instant development of World Wide Web, it becomes important to capture and analyze the web page contents in order to give the customers information better arranged. This article did a research in several ways and techniques which can capture and analyze the web pages by using the Visual C 6.0, on the basis of COM and MSAA. At last the article compared all the techniques and listed distinctly their advantages and disadvantages.
Key words: COM; DOM; MSAA; IE; Gecko; windows programming
1 引言
随着互联网的迅猛发展,如今我们面对的是一个包罗万象的网络世界,面对浩如烟海的信息,如何有效地提取网页信息成了一个十分重要的课题。如果掌握了相关的网页内容获取技术,将可以进行多方面的拓展活动,比如实时网页内容审查过滤、用户浏览行为分析、用户浏览网站的实时统计、网页自动化测试、为残疾人士浏览网页提供辅助功能。以上许多活动中都可能隐藏着很多潜在的商机。
2 关键概念
2.1 组件技术(COM)
简单地说,COM是一种跨应用和语言共享二进制代码的方法。与C 不同,它提倡源代码重用。COM通过定义二进制标准解决了这些问题,即COM明确指出二进制模块(DLLs和EXEs)必须被编译成与指定的结构匹配。这个标准也确切规定了在内存中如何组织COM对象。COM定义的二进制标准还必须独立于任何编程语言(如C 中的命名修饰)。一旦满足了这些条件,就可以轻松地从任何编程语言中存取这些模块。由编译器负责所产生的二进制代码与标准兼容。这样使后来的人就能更容易地使用这些二进制代码。
2.2 MSAA (Microsoft? Active Accessibility)
Microsoft? Active Accessibility 是一种相对较新的技术。目的是方便身患残疾的人士使用电脑——可用于放大器、屏幕阅读器,以及触觉型鼠标。同样还可以用来开发驱动其它软件的应用程序,其模拟用户输入的能力尤其适合测试软件的开发。
Active Accessibility 的主要思想是提供一种以程序方式访问UI元素信息或操作这些UI元素的功能。支持这种功能的 UI(User Interface) 元素是可访问的。在大多数情况下,这意味着一个UI元素支持 IAccessible 接口。你也可以说在 Active Accessibility 的世界里,一个可访问的UI元素可表示为 IAccessible 接口。每当你需要得到有关一个元素的信息,在其上执行一个动作,或者使用 Active Accessibility 做其它的什么,你通常需要通过使用代表这个元素的 IAccessible 接口的一种方法或者属性来引用这个元素。
2.3 GUID (Globally Unique Identifier)
GUID(全球唯一标示符——Globally Unique Identifier)是个128位的数字。它是一种独立于COM编程语言的标示方法。每一个接口和coclass有一个GUID。因为每一个GUID都是全球唯一的,所以避免了名字冲突(只要你用COM API创建它们)。有时你还会碰到另一个术语UUID(意思也是全球唯一标示符——universally unique identifier)。UUIDs和GUIDs在实际使用时的用途是一样的。
3 程序实现
3.1 IE内核浏览器网页内容获取与分析(基于COM技术)
上述基于窗口遍历的技术有十分大的缺陷,无法对网页内容进行访问,而且更为严重的是,当前几乎所有的浏览器都支持标签式的浏览,如果采用上述的方法只能访问当前激活的标签。鉴于以上原因,我们采用COM技术来进行实现,这里的关键就是取得每个网页的IHTMLDocument2接口,这个接口封装了众多的方法,我们完全可以用它来进行丰富的二次开发。
这里引入一个windows编程中的对象Shell Windows Object。通俗来说,shell就是用户和操作系统交互的一个接口,也就是接收和返回信息的一个通道;比如说windows操作系统中的explorer.exe,也就是桌面任务栏就是一个shell,如果通过任务管理器结束explorer.exe进程,桌面任务栏也就随之没有了。每一个网页就是一个Shell Windows Object,我们通过枚举所有的Shell Windows Object并试图获得其IHTEMLDocument2接口指针,如果成功说明这个Shell Windows Object是一个HTML容器,我们就可以通过其封装的方法进行操作。
这里使用COM技术来取得所有网页的URL,具体程序如下:
CComPtr <IShellWindows> spShellWin;// 定义智能指针
CoInitialize(NULL);// 初始化COM库
HRESULT hr =spShellWin.CoCreateInstance(CLSID_ShellWindows);// 根据指定CLSID创建一个未初始化的对象
if (FAILED(hr)) return;
long nCount=0;
char URL[2000];
spShellWin->get_Count(