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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

升級版說明:增加對獲取指定控件的判斷,利用標(biāo)志bGetCaller,減少循環(huán)和遞歸,基于效能提升門戶生產(chǎn)地址獲取主叫,可從60s壓縮到6s

1.獨立代碼

#include <atlbase.h>
#include <mshtml.h>
#include <winuser.h>
#include <comdef.h>
#include <string.h>
void EnumIE(void);//處理網(wǎng)頁
void EnumFrame(IHTMLDocument2 * pIHTMLDocument2);//處理框架
CComModule _Module;??//使用CComDispatchDriver ATL的智能指針,此處必須聲明
#include <atlcom.h>
void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2);//獲取網(wǎng)頁內(nèi)元素
CString???? glb_strCaller;//全局主叫
BOOL??????? glb_bGetCaller;//是否獲取到主叫

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

?long nCount=0;??? //取得瀏覽器實例個數(shù)(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;? //設(shè)置的URL(必須是此URL的網(wǎng)站才有效);
??cIEUrl_Filter="http://172.20.33.130:8082/csp/"; //效能提升門戶過濾的網(wǎng)址???
??//*******************************************************************************

??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)
??{
???// 程序運行到此,已經(jīng)找到了IHTMLDocument2的接口指針
???glb_bGetCaller=false;//恢復(fù)主叫未獲取標(biāo)志
???EnumAllElement(spDocument2);//枚舉所有字段
??}???
? }??
}

//在框架內(nèi)獲取主叫
void EnumAllElement(IHTMLDocument2 * pIHTMLDocument2) //枚舉所有字段
{
?if (!pIHTMLDocument2) return;?
??
?EnumFrame(pIHTMLDocument2);?? //遞歸枚舉當(dāng)前IHTMLDocument2上的子框架frame?

?if (glb_bGetCaller) return;//已獲取主叫

?HRESULT?? hr;??
?CComQIPtr<IHTMLElementCollection> spAllElement;
?hr=pIHTMLDocument2->get_all(&spAllElement);//獲取所有網(wǎng)頁內(nèi)所有元素
?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);//可以獲取其他特征,根據(jù)具體元素而定
???CString strTemp=bTemp;
???if(!strTemp.IsEmpty() && strTemp=="callNo")//根據(jù)id是主叫號碼獲取值或作其他處理
???{
????IHTMLInputTextElement* input;
????pDisp->QueryInterface(IID_IHTMLInputTextElement,(void**)&input);
????input->get_value(&bTemp);
????if(bTemp==NULL) glb_strCaller="";
????else glb_strCaller=bTemp;
????glb_bGetCaller=true;//找到主叫
????break;
???}
??}
?}
}

//循環(huán)頁面框架
void EnumFrame(IHTMLDocument2 * pIHTMLDocument2)
{??
?if (!pIHTMLDocument2) return;?????
?if (glb_bGetCaller) return;//已獲取主叫

?HRESULT?? hr;?????
?CComPtr<IHTMLFramesCollection2> spFramesCollection2;??
?pIHTMLDocument2->get_frames(&spFramesCollection2); //取得框架frame的集合??
???
?long nFrameCount=0;??????? //取得子框架個數(shù)??
?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);????? //遞歸枚舉當(dāng)前子框架?? IHTMLDocument2?? 上的所有控件?
?}??
}

?

//-----------結(jié)束---------------------//

2.執(zhí)行代碼:

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲天堂爱爱 | 99热网站| 成人黄色一级视频 | 射射射综合网 | 欧美色图一区二区三区 | 黄色中文字幕 | 欧美丰满老熟妇aaaa片 | 丁香啪啪综合成人亚洲 | 爱爱高潮视频 | 日本护士取精xxxxxhd | 狠狠干夜夜骑 | 日韩精品1区| av天天有| 中文字幕免费在线看线人 | 日日射视频| 中文字幕一区二区久久人妻 | 伊人网五月天 | www.狠狠操.com| 蜜臀久久99精品久久久久久 | 天天色小说 | 变态另类丨国产精品 | 国产一区在线看 | 国产日韩精品中文字无码 | 欧美嫩草| 久久久一区二区三区四区 | 成人av电影在线播放 | 又粗又大又硬毛片免费看 | 日韩a级一片 | 又黄又爽一区二区三区 | 久久久久久在线观看 | 国产小视频你懂的 | 国产麻豆一精品一av一免费 | av黄页| 97久久人人 | 看全色黄大色黄大片女一次牛 | 欧美日韩国产黄色 | 青青草久久 | 欧美在线色 | 欧美精品午夜 | 亚洲自拍偷拍一区二区三区 | aaa欧美| 国产偷怕 | 日批免费观看 | 亚洲AV无码国产精品国产剧情 | 双腿张开被9个男人调教 | av片在线免费看 | 刘亦菲毛片一区二区三区 | 无码精品人妻一区二区三区漫画 | 午夜宫| 顶臀精品视频www | 欧美日韩免费一区 | 丁香激情六月 | 国产精品色婷婷99久久精品 | 中日韩男男gay无套 人人草人人干 | 亚洲成av人片一区二区梦乃 | 欧美xxxx黑人又粗又长密月 | 中国国产精品 | 亚洲美女www午夜 | 亚洲老女人av | 国产精品成人免费视频 | 国产人妻黑人一区二区三区 | 金8天国av| 国产精品suv一区二区 | 国产精品jizz在线观看美国 | 欧美少妇性生活 | 三级中文字幕 | 亚洲成熟女性毛茸茸 | 欧美性猛交xxx乱大交3蜜桃 | 骚视频在线观看 | 夜夜摸夜夜操 | 日本一区免费视频 | 欧美精品hd | 天天插天天 | 韩国av永久免费 | 日本伊人色| aa视频在线观看 | 亚洲精品中字 | 久久久久久www | 成人激情五月天 | 狠狠躁| 久久com | 99国产在线| 扒开jk护士狂揉免费 | 欧美老熟 | 欧美亚洲第一页 | 免费一级淫片aaa片毛片a级 | 一区二区三区国产在线观看 | 中文字幕五码 | av噜噜色| 黄色特一级 | 久久国产人妻一区二区免色戒电影 | 美美女高清毛片视频免费观看 | 久久久国产精品人人片 | 日本精品一二三区 | 国产精品露脸视频 | 爱情岛论坛永久入址测速 | 亚洲色图另类 | 毛片999| 国产一区二区三区毛片 |