• webBrowser 应用编程函数总结


      1 /*============================说明部分================================= 
      2  实现一下函数需包含头文件 
      3 #include <Wininet.h> 
      4 #include <Shlwapi.h> 
      5 Linker : Wininet.lib  Shlwapi.lib 
      6 =================================================================*/  
      7 /*========================================END========================================*/  
      8   
      9 /*============================说明部分================================= 
     10 清除指定网页Cookie,注意传参,如:www.baidu.com 要写为:baidu.com 
     11 =================================================================*/  
     12 BOOL CleanUrlCache(LPCTSTR lpUrl)  
     13 {  
     14     LPINTERNET_CACHE_ENTRY_INFO lpICEI = NULL;  
     15     DWORD dwSize = 0;  
     16     HANDLE hFind = FindFirstUrlCacheEntry(NULL, NULL, &dwSize);  
     17     if (hFind == NULL && GetLastError() != ERROR_INSUFFICIENT_BUFFER)  
     18         return FALSE;  
     19   
     20     lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];  
     21     hFind = FindFirstUrlCacheEntry(NULL, lpICEI, &dwSize);  
     22     if (hFind == NULL)  
     23     {  
     24         delete lpICEI;  
     25         return FALSE;  
     26     }  
     27   
     28     do   
     29     {  
     30         if (StrStrI(lpICEI->lpszSourceUrlName, lpUrl))  
     31         {  
     32             int bRet = DeleteUrlCacheEntry(lpICEI->lpszSourceUrlName);  
     33         }  
     34         delete lpICEI;  
     35         lpICEI = NULL;  
     36         dwSize = 0;  
     37   
     38         if (!FindNextUrlCacheEntry(hFind, NULL, &dwSize) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)  
     39             break;  
     40         lpICEI = (LPINTERNET_CACHE_ENTRY_INFO)new char[dwSize];  
     41     } while (FindNextUrlCacheEntry(hFind, lpICEI, &dwSize));  
     42   
     43     if (lpICEI != NULL)  
     44         delete lpICEI;  
     45     return TRUE;  
     46 }  
     47 /*========================================END========================================*/  
     48   
     49   
     50   
     51   
     52 /*============================说明部分================================= 
     53 清除IE所有Cookie 
     54 #include <Wininet.h> 
     55 Linker : Wininet.lib 
     56 =================================================================*/  
     57 void   ClearInternetCache()     
     58 {     
     59     DWORD   dwNeeded   =   0;     
     60     FindFirstUrlCacheEntry(NULL,   NULL,   &dwNeeded);    
     61   
     62     if   (GetLastError()   ==   ERROR_INSUFFICIENT_BUFFER)     
     63     {     
     64         unsigned   char   *buffer   =   new   unsigned   char[dwNeeded];     
     65         try     
     66         {     
     67             LPINTERNET_CACHE_ENTRY_INFO   lpicei   =     
     68                 reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);     
     69             HANDLE   HFind   =     FindFirstUrlCacheEntry(NULL,   lpicei,   &dwNeeded);     
     70             DeleteUrlCacheEntry(lpicei->lpszSourceUrlName);    
     71   
     72             bool   no_more_files   =   false;     
     73             while   (!no_more_files)     
     74             {     
     75                 if   (FindNextUrlCacheEntry(HFind,   lpicei,   &dwNeeded))     
     76                 {     
     77                     DeleteUrlCacheEntry(lpicei->lpszSourceUrlName);     
     78                 }     
     79                 else   switch   (GetLastError())     
     80                 {     
     81 case   ERROR_INSUFFICIENT_BUFFER:     
     82     {     
     83         delete   []   buffer;     
     84         buffer   =   new   unsigned   char[dwNeeded];     
     85         lpicei   =   reinterpret_cast<LPINTERNET_CACHE_ENTRY_INFO>(buffer);     
     86         break;     
     87     }     
     88 default:     
     89     {     
     90         no_more_files   =   true;     
     91         break;     
     92     }     
     93                 }     
     94             }  
     95             FindCloseUrlCache(HFind);  
     96         }     
     97         catch   (...)     
     98         {     
     99             delete   []   buffer;     
    100         }     
    101         delete   []   buffer;                     
    102     }     
    103 }  
    104   
    105 /*========================================END========================================*/  
    106   
    107 /*============================说明部分================================= 
    108 CString 转换为 VARIANT 类型 
    109 =================================================================*/  
    110 StringToVariant(CString str)  
    111 {  
    112     VARIANT variant;  
    113     VariantInit(&variant);  
    114     variant.vt=VT_BSTR;  
    115     variant.bstrVal=str.AllocSysString();  
    116   
    117     return variant;  
    118 }  
    119 /*========================================END========================================*/  
    120   
    121 /*============================说明部分================================= 
    122 打开指定URL,其中m_webBrowser 是web browser 
    123 控件关联的控件类型的变量 
    124 =================================================================*/  
    125 OpenURL(LPCTSTR strURL)  
    126 {  
    127     VARIANT vInfo;  
    128     VariantInit(&vInfo);  
    129     CString strHeaders=_T("Content-Type:application/x-WWW-form-urlencoded");  
    130     VARIANT vHeaders=StringToVariant(strHeaders);  
    131     m_webBrowser.Navigate(strURL,&vInfo,&vInfo,&vInfo,&vHeaders);  
    132 }  
    133 /*========================================END========================================*/  
    134   
    135   
    136   
    137   
    138 /*============================说明部分================================= 
    139 向指定ID的HTML标记中输入文字 
    140 strID为标记的ID值  
    141 #include <mshtml.h> 
    142 #include <atlbase.h> 
    143 =================================================================*/  
    144 InputText(CString strID, CComVariant strText)  
    145 {  
    146     HRESULT hr;  
    147   
    148     IDispatch *pDisp;  
    149     pDisp=m_webBrowser.get_Document();  //得到webBrowser控件接口  
    150   
    151     IHTMLDocument2* pDoc;  
    152     hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口  
    153       
    154     IHTMLElementCollection* pColl=NULL;  
    155     hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合  
    156   
    157     IDispatch *pDisp2;  
    158     VARIANT index;//用于接收返回元素基于的索引,一般不用,设为0就好,而是用IDispatch 接收元素对象接口  
    159     //V_VT(&index)=VT_I4;  
    160     //V_I4(&index)=0;  
    161     index.vt=VT_I4;  
    162     index.lVal=0;  
    163   
    164     VARIANT varID;//要查找的HTML标记ID  
    165     varID=StringToVariant(strID);  
    166   
    167     hr=pColl->item(varID,index,&pDisp2); //找到元素的位置  
    168     if(S_OK==hr&&NULL!=pDisp2)  
    169     {  
    170         IHTMLElement* pElem=NULL;  
    171         hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);  
    172   
    173         if(S_OK==hr&&NULL!=pElem)  
    174         {  
    175             pElem->put_innerText(strText.bstrVal);  
    176             pElem->Release();  
    177         }  
    178         pDisp2->Release();  
    179         pDisp->Release();  
    180     }  
    181 }  
    182 /*========================================END========================================*/  
    183 /*============================说明部分================================= 
    184 点击指定ID值的HTML按钮 
    185 strID是按钮的ID值 
    186 #include <mshtml.h> 
    187 #include <atlbase.h> 
    188 =================================================================*/  
    189 ClickBtn(CString strID)  
    190 {  
    191     HRESULT hr;  
    192     IDispatch* pDisp;  
    193     pDisp=m_webBrowser.get_Document();//①得到网页控件接口  
    194   
    195     IHTMLDocument2* pDoc;  
    196     hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);//②得到网页文档接口  
    197   
    198     IHTMLElementCollection* pColl=NULL;  
    199     hr=pDoc->get_all(&pColl);//③得到网页元素记录集合接口  
    200   
    201     IDispatch* pDisp2;  
    202     VARIANT index;  
    203     //V_VT(&index)=VT_I4;  
    204     //V_I4(&index)=0;  
    205     index.vt=VT_I4;  
    206     index.lVal=0;  
    207   
    208     VARIANT varID;  
    209     varID=StringToVariant(strID);  
    210   
    211     hr=pColl->item(varID,index,&pDisp2);//④得到指定HTML标记接口  
    212   
    213     if(S_OK==hr&&NULL!=pDisp2)  
    214     {  
    215         IHTMLElement* pElem=NULL;  
    216         hr=pDisp2->QueryInterface(IID_IHTMLElement,(void**)&pElem);//⑤得到确定元素接口  
    217   
    218         if(S_OK==hr&&NULL!=pElem)  
    219         {  
    220             pElem->click();  
    221             pElem->Release();  
    222         }  
    223         pDisp2->Release();  
    224         pDisp->Release();  
    225     }  
    226 }  
    227 /*========================================END========================================*/  
    228 /*=============================================================== 
    229 根据页面Class属性值点击页面元素 
    230 =================================================================*/  
    231 void CPiLiangQianDaoDlg::ClickByClassName()  
    232 {  
    233     IHTMLElementCollection   *objAllElement=NULL;   
    234     IHTMLDocument2   *objDocument=NULL;   
    235   
    236     objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();   
    237     //由控件得到IHTMLDocument2接口指针  
    238   
    239     objDocument-> get_all(&objAllElement);   //得到网页所有元素的集合  
    240   
    241     IHTMLElement   *   pElem   =   NULL;     
    242     VARIANT   name;   
    243     CComBSTR   tag;   
    244     long     a;   
    245     objAllElement-> get_length(&a);   
    246     name.vt=VT_I4;  
    247     for(int   i=0;i <a;i++)//遍历所有元素  
    248     {   
    249         name.lVal   =   i;   
    250         IDispatch   *   pDispatch=NULL;   
    251         objAllElement-> item(name,name,&pDispatch);   
    252         IHTMLElement*   spElement;   
    253         pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);   
    254         BSTR   tag;   
    255         spElement->get_className(&tag);   
    256         CString   ss(tag);   
    257         if(ss == "j_signbtn sign_btn2 j_cansign sign0" || ss == "j_signbtn sign_btn2 j_cansign sign1" || ss == "j_signbtn sign_btn2 j_cansign sign6")   
    258             spElement-> click();   
    259     }   
    260 /*=====================================================================================*/  
    261 /*===================================================================================== 
    262 根据网页打开的进程设置进度条 
    263 给web browser添加OnProgressChange响应函数 
    264 m_procCtrl是进度条关联的控件变量 
    265 =======================================================================*/  
    266 if(ProgressMax>0)  
    267     m_procCtrl.SetPos(100*Progress / ProgressMax);  
    268 //========================================  
    269   
    270 /*==================================================================== 
    271 搜索点击页面文字连接 
    272 Str为文字 
    273 =======================================================================*/  
    274 ClickItem(CString str)  
    275 {  
    276     IHTMLElementCollection   *objAllElement=NULL;   
    277     IHTMLDocument2   *objDocument=NULL;   
    278           
    279    objDocument=(IHTMLDocument2 *)m_webBrowser.get_Document();   
    280    //由控件得到IHTMLDocument2接口指针  
    281   
    282     objDocument-> get_all(&objAllElement);   //得到网页所有元素的集合  
    283   
    284     IHTMLElement   *   pElem   =   NULL;     
    285     VARIANT   name;   
    286     CComBSTR   tag;   
    287     long     a;   
    288     objAllElement-> get_length(&a);   
    289     name.vt=VT_I4;  
    290     for(int   i=0;i <a;i++)//遍历所有元素  
    291     {   
    292         name.lVal   =   i;   
    293         IDispatch   *   pDispatch=NULL;   
    294         objAllElement-> item(name,name,&pDispatch);   
    295         IHTMLElement*   spElement;   
    296         pDispatch-> QueryInterface(IID_IHTMLElement,   (void**)&spElement);   
    297         BSTR   tag;   
    298         spElement-> get_outerText(&tag);   
    299         CString   ss(tag);   
    300         if(ss=="地图")   
    301             spElement-> click();   
    302     }   
    303 }  
    304 /*=====================================================================================*/  
    305 /*======================================================================================= 
    306 在DocumentCompleteExplorer判断是否为主框架加载完毕 
    307 在页面中有多个框架时会多次触发,可能导致页面中后面的“首页”链接得不到,可以在void   CTest2Dlg::OnDownloadCompleteExplorer1(LPDISPATCH   pDisp,   VARIANT   FAR*   URL)  
    308 加入下面代码:  
    309 ======================================================================================*/CComQIPtr <IWebBrowser2,   &IID_IWebBrowser2>   pWeb; CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2>   pDoc2; pWeb   =   pDisp; pWeb-> get_Document((IDispatch**)&pDoc2); if   (m_ie.GetDocument()   !=   pDoc2)   return;  
    310 /*==========================================================================*/  
    311   
    312   
    313 /*====================================================================== 
    314    判断网页是否加载完毕 
    315 ========================================================================*/  
    316 void CPiLiangQianDaoDlg::DocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT* URL)  
    317 {  
    318     // TODO: 在此处添加消息处理程序代码  
    319     if(m_webBrowser.get_ReadyState() == READYSTATE_COMPLETE && times == 0)   
    320     {  
    321      ((CListBox *)GetDlgItem(IDC_LIST_STATE))->AddString(_T("加载完毕!"));  
    322      m_IsInitDone = 1;  
    323      times++;  
    324     }  
    325 }     
    326 /*====================================================================================== 
    327  截取网页部分内容,并画图显示 
    328 ======================================================================================*/  
    329 {  
    330 CClientDC hImageDC(GetDlgItem(IDC_EDIT_INFO));  
    331   
    332     HRESULT hr;  
    333   
    334     IDispatch *pDisp;  
    335     pDisp=m_webBrowser.get_Document();  //得到webBrowser控件接口  
    336   
    337     IHTMLDocument2* pDoc;  
    338     hr=pDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc); //得到网页文档接口  
    339       
    340     IHTMLElementCollection* pColl=NULL;  
    341     hr=pDoc->get_all(&pColl);//得到所有网页元素记录集合  
    342   
    343     IDispatch *pDisp2;  
    344     VARIANT index;//用于接收返回元素基于的索引,一般不用,设为就好,而是用IDispatch 接收元素对象接口  
    345     //V_VT(&index)=VT_I4;  
    346     //V_I4(&index)=0;  
    347     index.vt=VT_I4;  
    348     index.lVal=0;  
    349   
    350     VARIANT varID;//要查找的HTML标记ID  
    351     varID=StringToVariant(_T("userlike_info_head_img"));  
    352   
    353     hr=pColl->item(varID,index,&pDisp2); //找到元素的位置  
    354     if(S_OK==hr&&NULL!=pDisp2)  
    355     {  
    356         IHTMLElement3* pElem=NULL;  
    357         hr=pDisp2->QueryInterface(IID_IHTMLElement3,(void**)&pElem);  
    358         IHTMLElementRender *pRender =  NULL;    
    359         pElem ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);    
    360         pRender->DrawToDC(hImageDC);  
    361     }  
    362 }  
    363 /*=================================================================================*/  
    364   
    365 /*================================================================================= 
    366 判断网页是否加在完全(包含框架) 
    367 原理:如果直接早DocummentComple里判断的话,包含多个框架(frame)的网页就会多次激发该函数。所以这里我们这里通过pDish判断是不是主框架的的借口(最后调用该函数),如果是的话就是最后一次激发,表示主框架家在完毕,也就是整个网页加载完毕! 
    368 =====================================================================================*/  
    369 void CTieBaGuajiDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)  
    370 {  
    371     // TODO: 在此处添加消息处理程序代码  
    372     CComQIPtr <IWebBrowser2,   &IID_IWebBrowser2>   pWeb;   
    373     CComQIPtr <IHTMLDocument2,&IID_IHTMLDocument2>   pDoc2;   
    374     pWeb   =   pDisp;   
    375     pWeb-> get_Document((IDispatch**)&pDoc2);   
    376     if   (m_webBrowser.get_Document()   ==   pDoc2)     
    377     {  
    378           ((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!"));  
    379     }  
    380     /////////////////////////////////////////  
    381     /*if(0==m_count) 
    382     { 
    383         ((CListBox*)GetDlgItem(IDC_LIST_STATE))->AddString(_T("初始化完成!")); 
    384         m_count++; 
    385     }*/  
    386 }  
    387 /*=============================================================================*/  
    388 /*============================================================================== 
    389  另外如果不想让webbrowser空间弹出错误提示可以,在对空间资源编辑时设置Slient为TRUE 
    390 ==============================================================================*/  
  • 相关阅读:
    c++ namespace简单用法
    python2编码问题
    python dict()函数 /// logging模块///yield//生成器和迭代器
    python 对于一个字典,根据其value值获取其对应的keys值
    python 包/库/模块
    python __init()__
    python continue 和 break的区别
    python list去重
    linux命令,将一个文件夹中的内容copy到另外一个文件夹
    python 正则(re.compile()/re.findall())
  • 原文地址:https://www.cnblogs.com/anlaoliu/p/7249324.html
Copyright © 2020-2023  润新知