1.独立代码

//-----------开始---------------------//
#include <atlbase.h>
#include <mshtml.h>
#include <winuser.h>
#include <comdef.h>
#include <string.h>
void EnumIE(void);//处理网页
CComModule _Module;  //使用CComDispatchDriver ATL的智能指针,此处必须声明
#include <atlcom.h>
void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2);

void EnumIE(void)  
{  
  CComPtr<IShellWindows> spShellWin;  
  HRESULT hr=spShellWin.CoCreateInstance(CLSID_ShellWindows);  
  if (FAILED(hr))  
  {  
  return;  
  }

long nCount=0;    //取得浏览器实例个数(Explorer和IExplorer)  
  spShellWin->get_Count(&nCount);  
  if (0==nCount)  
  {  
    return;  
  }

for(int i=0; i<nCount; i++)  
  {  
    CComPtr<IDispatch> spDispIE;  
    hr=spShellWin->Item(CComVariant((long)i), &spDispIE);  
    if (FAILED(hr)) continue;
 
    CComQIPtr<IWebBrowser2>spBrowser=spDispIE;  
    if (!spBrowser) continue;
 
    CComPtr<IDispatch> spDispDoc;  
    hr=spBrowser->get_Document(&spDispDoc);  
    if (FAILED(hr)) continue;
 
    CComQIPtr<IHTMLDocument2>spDocument2 =spDispDoc;  
    if (!spDocument2) continue;

//Modify by jncao 2007-09-17
 //*******************************************************************************
 CString cIEUrl_Filter;  //设置的URL(必须是此URL的网站才有效);
    cIEUrl_Filter="http://127.0.0.1:8082/csp/"; //设置过滤的网址
    //*******************************************************************************

CComBSTR IEUrl;
 spBrowser->get_LocationURL(&IEUrl);
 CString cIEUrl_Get;     //从机器上取得的HTTP的完整的URL;
 cIEUrl_Get=IEUrl;
 cIEUrl_Get=cIEUrl_Get.Left(cIEUrl_Filter.GetLength()); //截取前面N位

if (strcmp(cIEUrl_Get,cIEUrl_Filter)==0)
 {
     // 程序运行到此,已经找到了IHTMLDocument2的接口指针      
       EnumAllElement(spDocument2);//枚举所有元素

}   
  }  
}

void EnumFrame(IHTMLDocument2 * pIHTMLDocument2)
{  
 if (!pIHTMLDocument2) return;      
 HRESULT   hr;  
   
 CComPtr<IHTMLFramesCollection2> spFramesCollection2;  
 pIHTMLDocument2->get_frames(&spFramesCollection2); //取得框架frame的集合  
   
 long nFrameCount=0;        //取得子框架个数  
 hr=spFramesCollection2->get_length(&nFrameCount);  
 if (FAILED(hr)|| 0==nFrameCount) return;  
   
 for(long i=0; i<nFrameCount; i++)  
 {  
  CComVariant vDispWin2; //取得子框架的自动化接口  
  hr = spFramesCollection2->item(&CComVariant(i), &vDispWin2);  
  if (FAILED(hr)) continue;      
  CComQIPtr<IHTMLWindow2>spWin2 = vDispWin2.pdispVal;  
  if (!spWin2) continue; //取得子框架的   IHTMLWindow2   接口      
  CComPtr <IHTMLDocument2> spDoc2;  
  spWin2->get_document(&spDoc2); //取得子框架的   IHTMLDocument2   接口
  
  EnumAllElement(spDoc2);      //递归枚举当前子框架   IHTMLDocument2   上的所有控件
 }  
}

void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2) //枚举所有字段
{
 if (!pIHTMLDocument2) return; 
 EnumFrame(pIHTMLDocument2);   //递归枚举当前IHTMLDocument2上的子框架frame  
 HRESULT   hr;

CComQIPtr<IHTMLElementCollection> spAllElement;
 hr=pIHTMLDocument2->get_all(&spAllElement);//获取所有网页内所有元素
 if (FAILED(hr))  return;

long nLength = 0;
 spAllElement->get_length (&nLength);
 for (int i = 0; i < nLength; i++)
 {
        CComPtr<IDispatch> pDisp;
  hr = spAllElement->item(COleVariant((long)i),COleVariant((long)0),&pDisp); //获取单个元素
  if(SUCCEEDED(hr))
  {
   //CComQIPtr <IHTMLElement, &IID_IHTMLElement> pElement(pDisp);
   CComQIPtr<IHTMLElement, &IID_IHTMLElement> pElement;
   pDisp->QueryInterface(&pElement);
   BSTR bTemp;
   pElement->get_id(&bTemp);//可以获取其他特征,根据具体元素而定
   CString strTemp=bTemp;
   if(!strTemp.IsEmpty() && strTemp=="callNo")//根据callNo(效能提升text控件id)是主叫号码获取值或作其他处理
   {
    IHTMLInputTextElement* input;
    pDisp->QueryInterface(IID_IHTMLInputTextElement,(void**)&input);
    input->get_value(&bTemp);
    if(bTemp==NULL) strTemp="null";
    else strTemp=bTemp;
    CStdioFile ioFile;
    ioFile.Open("callerno.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
    ioFile.SeekToEnd();//先定位到文件尾部
    CString strInsert=strTemp+"/n";
    ioFile.WriteString(strInsert);
    ioFile.Close();
   }
  }
 }
}

//-----------结束---------------------//

2.执行代码:

void CDemoDlg::OnOK()
{
 // TODO: Add extra validation here
 ::CoInitialize(NULL); //初始化COM
     EnumIE();             //枚举浏览器      
     ::CoUninitialize();   //释放COM
 //CDialog::OnOK();
}

vc采集网页内frame框架下所有元素(不指定具体table/form)相关推荐

  1. vc采集网页内frame框架下所有元素(不指定具体table/form)-升级版

    升级版说明:增加对获取指定控件的判断,利用标志bGetCaller,减少循环和递归,基于效能提升门户生产地址获取主叫,可从60s压缩到6s 1.独立代码 #include <atlbase.h& ...

  2. vc采集网页内指定frame框架下所有元素-再升级版

    再升级版说明:通过frame的get_location属性,指定frame来获取其元素,减少递归和循环,减少循环和递归,基于效能提升门户生产地址获取主叫,可从6s压缩到1s,耗时在于指定frame所有 ...

  3. vc采集网页内所有元素(不指定具体table/form/frame)

    1.独立代码 //-----------开始---------------------// #include <atlbase.h> #include <mshtml.h> # ...

  4. VC采集网页所有表单域

    1.独立代码 //-----------开始---------------------// #include <atlbase.h> #include <Mshtml.h> # ...

  5. vc获取网页内table

    1.独立代码: //-----------开始---------------------// #include <atlbase.h> #include <mshtml.h> ...

  6. 结构化元素、网页结构和iframe内联框架

    1.结构化元素 <header> //表示网页的头部 <footer> //表示网页的尾部 <section> //表示网页的独立区域 <article> ...

  7. html内嵌框架怎么写,在HTML网页中,内嵌框架的标签代码是()。

    在HTML网页中,内嵌框架的标签代码是(). 更多相关问题 每年人环奖的考试报名时间大约在5月份 嗅觉的香气包裹在闻气味的人周围,成为一种氛围,构成( )天空. Access的控件对象可以设置某个属性 ...

  8. day11学习 前端HTML网页基本结构、标签及超链接的使用、内联框架

    前端 <!-- 这是HTML注释格式 --> 前端:三大技术 HTML:负责显示页面内容(文字.按钮.输入框等) CSS:负责页面内容的布局和样式 JavaScript:负责实现功能. 前 ...

  9. 内嵌框架iframe在火狐ff下自适高度(ie6、ie7、ff都正常)

    1.脚本 在调用iframe的页面添加脚本 var FFextraHeight = 0; if(window.navigator.userAgent.indexOf("Firefox&quo ...

最新文章

  1. 关于过往与未来的思考
  2. 【辟谣】java中的final方法在新版的jvm中能提高效率?
  3. 分计算iv值_快捷、经济、实用的光伏及IV曲线测试仪PVPM 1500X
  4. 关于html的一些杂技
  5. oracle--第一天PLSQL--bai
  6. 《MarkDown》语法笔记
  7. Oracle-数据库的备份与恢复
  8. 华为大数据客户端安装步骤
  9. Functional ALV系列 (08) - Data Changed 事件
  10. 这款文件传输软件每隔10秒就会发起文件同步——镭速传输
  11. Python编程 统计Java源文件代码行数,注释行数,空白行数
  12. Cutecom无法打开USB串口
  13. 多重网格法-松弛迭代法-二维泊松方程-python实现
  14. 如何把阿里图标库的图标生成代码并应用于自己的项目
  15. C#合并单元格,AddMergedRegion
  16. 八核版三星Galaxy S4(I9500)root教程
  17. github相关的网站
  18. 豆瓣自动登陆发广播(python), 豆瓣圣经Bot
  19. 带保护装置的水塔自动进水装置
  20. 何洛洛高考成绩查询2021,R1SE曾想续约:11少年毕业发言催泪,周震南更文,何洛洛哭上热搜...

热门文章

  1. java.text._Java.text
  2. Java容器--Map
  3. JavaEE 企业级分布式高级架构师课程_汇总贴
  4. 浅谈用原生 JS 模仿个Promise 的实现
  5. php curl流方式远程下载大文件
  6. 设计模式学习 - 工厂模式
  7. 下一代Asp.net开发规范OWIN(2)—— Katana介绍以及使用
  8. ApplicationListener,Game,Screen,Stage,Actor,Group
  9. 当img 路径为空时不显示x号
  10. ODBC的多线程应用