1. 程式人生 > >C++遍歷所有IE瀏覽器,得到裡面的所有元素

C++遍歷所有IE瀏覽器,得到裡面的所有元素

介紹 
網頁中的密碼輸入框和一般不同,他沒有控制代碼之類的,但是可以通過IE的IHTMLInputTextElement介面獲取!  
本文是教你如何得到網頁中輸入框的內容。如何你想獲取網頁中的密碼,則只要把if (lstrcmpi(strtype, _T("TEXT")) == 0) 改成if  
(lstrcmpi(strtype, _T("PASSWORD")) == 0) 就可以了,如果你要是再加個實時監視的話,就成了密碼竊取程式了咯! 
主要思路:獲取IE的IHTMLInputTextElement介面,這樣就可以獲取網頁中的輸入框(包括文字和密碼輸入框)的內容了。 


VARIANT id, index; 
CComPtr<IDispatch> spDispatch; 
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2; 
CComQIPtr<IHTMLElement, &IID_IHTMLElement> pElement; 
CComPtr<IHTMLElementCollection> pElementCol; 
CComPtr<IHTMLFormElement> pFormElement; 
CComPtr<IHTMLInputTextElement> pInputElement; 

//首先獲取IWebBrowser2介面 
CoInitialize(NULL); //必須要這句初始化 
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); 
if (m_spSHWinds == NULL) 

if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK) 

MessageBox("Failed"); 
CoUninitialize(); 




if (m_spSHWinds) 

int n = m_spSHWinds->GetCount(); 
for (int i = 0; i < n; i++) 

_variant_t v = (long)i; 
IDispatchPtr spDisp = m_spSHWinds->Item(v); 

SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一個IE視窗的智慧指標 
if (spBrowser) 

//獲取IHTMLDocument2介面 
if (SUCCEEDED(spBrowser->get_Document( &spDispatch))) 
pDoc2 = spDispatch; 
if(pDoc2!=NULL) 

// AfxMessageBox("已經獲取IHTMLDocument2"); 
if (SUCCEEDED(pDoc2->get_forms(&pElementCol))) 

// AfxMessageBox("已經獲取IHTMLElementCollection"); 
long p=0; 
if(SUCCEEDED(pElementCol->get_length(&p))); 
if(p!=0) 
{  

for(long i=0;i<=(p-1);i++) 


V_VT(&id) = VT_I4; 
V_I4(&id) = i; 
V_VT(&index) = VT_I4; 
V_I4(&index) = 0; 

if(SUCCEEDED(pElementCol->item(id,index, &spDispatch))) 


if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))

// AfxMessageBox("已經獲取IHTMLFormElement"); 
long q=0; 
if(SUCCEEDED(pFormElement->get_length(&q))); 
for(long j=0;j<=(q-1);j++) 

V_VT(&id) = VT_I4; 
V_I4(&id) = j; 
V_VT(&index) = VT_I4; 
V_I4(&index) = 0; 
if(SUCCEEDED(pFormElement->item(id,index, &spDispatch))) 



if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)))

//AfxMessageBox("已經獲取IHTMLInputTextElement"); 
CComBSTR value; 
CComBSTR type; 
pInputElement->get_type(&type);//獲取輸入框型別(密碼框還是文字框) 

CString strtype(type); 
strtype.MakeUpper(); 
if (lstrcmpi(strtype, _T("TEXT")) == 0)  

pInputElement->get_value(&value);//獲取文字框的值 
CString strvalue(value); 
AfxMessageBox(strvalue);