IE的BHO通过IHTMLDocument2接口获得网页源代码
参考了凤之焚的专栏: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;
}
IE的BHO通过IHTMLDocument2接口获得网页源代码的更多相关文章
- 如何使用Fiddler抓取APP接口和微信授权网页源代码
Fiddler,一个抓包神器,不仅可以通过手机访问APP抓取接口甚至一些数据,还可以抓取微信授权网页的代码. 下载安装 1. 下载地址(官网): https://www.telerik.com/do ...
- Java 网络爬虫获取网页源代码原理及实现
Java 网络爬虫获取网页源代码原理及实现 1.网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL ...
- php查看网页源代码的方法
这篇文章主要介绍了php查看网页源代码的方法,涉及php读取网页文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php查看网页源代码的方法.分享给大家供大家参考.具体实现 ...
- c#利用WebClient和WebRequest获取网页源代码的比较
前几天举例分析了用asp+xmlhttp获取网页源代码的方法,但c#中一般是可以利用WebClient类和WebRequest类获取网页源代码.下面分别说明这两种方法的实现. WebClient类获取 ...
- delphi 获取网页源代码
//获取网页源代码 var s: string; begin s := WebBrowser1.OleObject.document.body.innerHTML; //body内的所有代码 ...
- JS远程获取网页源代码的例子
js代码获取网页源代码. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < ...
- 如何在ios手机端的Safari浏览器 中“查看网页源代码”
在这里给大家分享一个很简单的用苹果手机无需越狱就可以查看网页源代码的方法,不过这个方法只用于苹果手机自带的Safari浏览器 随便添加一个safari 书签 (用于一会改为查看源码功能书签)进入书签 ...
- c#利用WebClient和WebRequest获取网页源代码
C#中一般是可以利用WebClient类和WebRequest类获取网页源代码.下面分别说明这两种方法的实现. WebClient类获取网页源代码 WebClient类 WebClient ...
- c#利用HttpWebRequest获取网页源代码
c#利用HttpWebRequest获取网页源代码,搞了好几天终于解决了,直接获取网站编码进行数据读取,再也不用担心乱码了! 命名空间:Using System.Net private static ...
随机推荐
- 【u025】贝茜的晨练计划
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= ...
- 5.7-GTID复制搭建
基本环境 Master Slave MySQL版本 MySQL-5.7.16-X86_64 MySQL-5.7.16-X86_64 IP 192.168.56.156 192.168.56.157 ...
- 【t040】SETI任务
Time Limit: 1 second Memory Limit: 128 MB [问题描述] Sqybi的电脑在做一个任务,就是SETI@home,据说这个任务在全世界有500 多万台电脑在同时做 ...
- HDU 1422 重温世界杯 - 贪心
传送门 题目大意: 给一串数,又正有负,求每一个前缀都大于0的最长子串长度. 题目分析: 直接贪心:每次左端点向右推1,不断延伸右端点,更新答案. code #include<bits/stdc ...
- 利用伪元素before实现自定义checkbox样式
原理:label标签的for属性可以将文字与复选框进行关联,点击文字可以同时将复选框选中. 隐藏checkbox标签,利用label标签的before伪元素来实现自定义样式.设置before伪元素的 ...
- 设置m_pszAppName值的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 CWinApp::m_pszAppName用于指定应用程序的名字.昨天这样修改它的值: m_pszAppName = ...
- ASP.NET中前台如何调用后台变量
.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %> ...
- 计算机的组成 —— 磁盘阵列(RAID)
磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"独立磁盘构成的具有冗余能力的阵列"之意.(另外一种常见阵列,FPGA:Fiel ...
- gdal的矢量栅格化接口GDALRasterizeLayers使用(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 gdal库提供了一个矢量栅格化接口函数GDALRasterizeLayers.今天让我们学习一下这个接口函数的使用.该 ...
- 新世界PT850/PT853检查用友机对接T1交易宝
新世界PT850/PT853检查用友机对接T1交易宝 这是一个老话题.简单.条形码号码模式是没有必要说,我要说的是,,启用条码扫描.显示有关信息. 并能够产生:条码 , 数量,价格格 这样做的目的.将 ...