日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/4/16 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vc采集网页内指定frame框架下所有元素-再升级版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

再升級版說明:通過frame的get_location屬性,指定frame來獲取其元素,減少遞歸和循環,減少循環和遞歸,基于效能提升門戶生產地址獲取主叫,可從6s壓縮到1s,耗時在于指定frame所有元素循環上。

1.獨立代碼

//--------------獲取效能提升門戶主叫---------------------------------------//
#include <atlbase.h>
#include <mshtml.h>
#include <winuser.h>
#include <comdef.h>
#include <string.h>
void EnumIE(void);//處理網頁
void EnummiddleFrame(IHTMLDocument2 * pIHTMLDocument2);//處理框架
void EnumleftFrame(IHTMLDocument2 * pIHTMLDocument2);//處理框架
CComModule _Module;??//使用CComDispatchDriver ATL的智能指針,此處必須聲明
#include <atlcom.h>
void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2);//獲取網頁內元素
CString???? glb_strCaller;//全局主叫

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 Fang jiansheng 2011-04-02
??//*******************************************************************************
??CString cIEUrl_Filter;? //設置的URL(必須是此URL的網站才有效);
??cIEUrl_Filter="http://172.20.33.130: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的接口指針
???EnummiddleFrame(spDocument2);
??}???
? }??
}

//在框架內獲取主叫
void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2) //枚舉所有字段
{
?if (!pIHTMLDocument2) return;? ??
?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 bId;
???pElement->get_id(&bId);//可以獲取其他特征,根據具體元素而定
???CString strId=bId;
???if(!strId.IsEmpty() && strId=="callNo")//根據id是主叫號碼獲取值或作其他處理
???{
????IHTMLInputTextElement* input;
????pDisp->QueryInterface(IID_IHTMLInputTextElement,(void**)&input);
????BSTR bVal;
????input->get_value(&bVal);
????if(bVal==NULL) glb_strCaller="";
????else glb_strCaller=bVal;
????break;
???}
??}
?}
}

void EnumleftFrame(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;
??//CComQIPtr<IHTMLFrameElement, &IID_IHTMLFrameElement> pFrmElement=vDispWin2.pdispVal;
??if (!spWin2) continue; //取得子框架的?? IHTMLWindow2?? 接口
??CComPtr <IHTMLLocation> spLoc;
??spWin2->get_location(&spLoc);//獲取frame的頁面地址
??BSTR bHref;
??spLoc->get_href(&bHref);//獲取鏈接地址
??????? CString strHref=bHref;
??if(!strHref.IsEmpty() && strHref=="http://172.20.33.130:8082/csp/bsm/leftFrame.action")
??{?
???//效能提升門戶中間框架leftFrame的頁面地址?
???CComPtr <IHTMLDocument2> spDoc2;??
???spWin2->get_document(&spDoc2); //取得子框架的?? IHTMLDocument2?? 接口
???EnumAllElement(spDoc2);//獲取效能提升門戶主叫
???break;
??}??
?}??
}

void EnummiddleFrame(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;
??//CComQIPtr<IHTMLFrameElement, &IID_IHTMLFrameElement> pFrmElement=vDispWin2.pdispVal;
??if (!spWin2) continue; //取得子框架的?? IHTMLWindow2?? 接口
??CComPtr <IHTMLLocation> spLoc;
??spWin2->get_location(&spLoc);//獲取frame的頁面地址
??BSTR bHref;
??spLoc->get_href(&bHref);//獲取鏈接地址
??????? CString strHref=bHref;
??if(!strHref.IsEmpty() && strHref=="http://172.20.33.130:8082/csp/mif/middleFrame.action")
??{?
???//效能提升門戶中間框架middleFrame的頁面地址
???CComPtr <IHTMLDocument2> spDoc2;??
???spWin2->get_document(&spDoc2); //取得子框架的?? IHTMLDocument2?? 接口
???EnumleftFrame(spDoc2);//獲取效能提升門戶左邊框架leftFrame
???break;
??}??
?}??
}

//-----------結束---------------------//

2.執行代碼:

void CDemoDlg::OnOK()
{
?// TODO: Add extra validation here
?::CoInitialize(NULL); //初始化COM
???? EnumIE();???????????? //枚舉瀏覽器??????
???? ::CoUninitialize();?? //釋放COM
?//CDialog::OnOK();
}

總結

以上是生活随笔為你收集整理的vc采集网页内指定frame框架下所有元素-再升级版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩av一区二区在线 | 极品粉嫩小仙女高潮喷水久久 | 亚洲一级黄色大片 | 国产视频xxx | 成人精品二区 | 色漫 | 91日本视频 | 亚洲精品视频网址 | 怡红院一区二区三区 | 99国产精品一区 | jizz日本大全 | 天天视频天天爽 | 国产福利一区二区三区 | 亚洲国产片 | 欧美高清视频一区 | 国产亚洲精品电影 | 日韩特级黄色片 | 最新毛片网| 色综合av| yy6080久久| 91视频三区 | 国产精品美女久久久久av超清 | 99精品视频免费 | 女生和男生一起插插插 | h视频在线观看网站 | 毛片少妇 | 想要xx视频 | 色哟哟视频在线观看 | www.久久.com | 亚洲综合首页 | 波多野结衣视频网站 | 黄色xxx| 日本精品一区在线 | 九九热精品在线视频 | japanese中文字幕 | 欧美日韩国产传媒 | 日韩欧美理论 | 国产啊啊啊啊 | 97热久久| 不卡免费av | 国产亚洲精久久久久久无码77777 | www.xxx日韩| 美女写真福利视频 | 大乳丰满人妻中文字幕日本 | 狠狠伊人 | 国产夫妻性爱视频 | 色乱码一区二区三区在线男奴 | 在线观看亚洲视频 | 人妻少妇偷人精品久久性色 | 国产孕妇一区二区三区 | 一本一道无码中文字幕精品热 | www.自拍| 国产嫩草在线观看 | 免费九九视频 | 91av网址| 日韩在线中文字幕视频 | 国模小丫大尺度啪啪人体 | 69式视频| 欧美性一区二区 | 亚洲黄色免费在线观看 | 国产精品午夜未成人免费观看 | 91久久在线| 欧美久久久精品 | 久久国产视频播放 | 夜夜艹天天干 | 国产欧美精品一区二区三区 | 五月婷婷开心网 | 操伊人| 日本不卡一区二区三区在线观看 | www.99爱 | 在线观看国产精品一区 | 少妇高潮一区二区三区喷水 | 国产情侣第一页 | 91色视频在线观看 | 内射后入在线观看一区 | 久久亚洲成人av | 国产成人精品一二三区 | 亚洲av成人一区二区国产精品 | 在线不卡中文字幕 | 精品视频不卡 | 少妇特黄a一区二区三区88av | 91精品国产自产精品男人的天堂 | 午夜av免费在线观看 | 裸体毛片| 欧美揉bbbbb揉bbbbb | 欧美精品黑人猛交高潮 | 无套中出丰满人妻无码 | 亲嘴扒胸摸屁股免费视频日本网站 | 国产激情图片 | 国产精品伦一区二区三区免费看 | 在线日韩 | 一级成人免费 | 欧美男女动态图 | 人妻互换一区二区激情偷拍 | 中文字幕精品在线视频 | 国产老女人乱淫免费可以 | 成人久色| 重口味av| 日吊视频 |