首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IE的BHO通过IHTMLDocument2接口获得网页源代码

IE的BHO通过IHTMLDocument2接口获得网页源代码

作者头像
ascii0x03
发布2018-04-12 13:03:55
8300
发布2018-04-12 13:03:55
举报

参考了凤之焚的专栏:http://blog.csdn.net/lion_wing/article/details/769742

但是他的源码有些问题,即IHTMLElementCollection接口的item应该填写正确的序列号,而不是0。

item序列号递增是深度优先的遍历标签,不明白的可以试一下,也就是说如果只用0序列号的话获得的是<!Document>的标签,1才是<html>标签内容,他俩是并列的。我这里是IE11做的实验,博主当年发文的时候不知道情况怎么样……

另外注意要使用IHTMLElement的outerHTML,innerHTML只会获得标签里的内容,不包含标签。

int detect_AppCache(IHTMLDocument2* pDocument)
{
	CComPtr<IHTMLElementCollection> spHTML;
	HRESULT hr = pDocument->get_all(&spHTML);
	long length = 0;
	spHTML->get_length(&length);

	if (hr == S_OK && spHTML != NULL) {
		for (int i = 0; i < length ; i++){//注意一下,这里i=1就可以获得普遍意义的所有源代码
			CComVariant svarIndex = i;
			CComVariant svarEmpty;
			CComPtr<IDispatch> spDisp;

			hr = spHTML->item(svarIndex, svarEmpty, &spDisp);
			if ( SUCCEEDED(hr) ) {
				CComQIPtr<IHTMLElement> spElement = spDisp;
				if (spElement) {
					CComBSTR bstrHTML; 
					spElement->get_outerHTML(&bstrHTML);
					USES_CONVERSION;
					CString ret = COLE2T(bstrHTML);
					if (ret.Find(_T("appcache")) != -1) {
						MessageBox(NULL, L"he", L"detect_AppCache", MB_OK);
						
					}
					MessageBox(NULL, ret, L"detect_AppCache", MB_OK);
				}

			} else {
				MessageBox(NULL, L"获取IDispatch失败", L"detect_AppCache", MB_ABORTRETRYIGNORE);
			}
		}
	}
	return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-06-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档