如何获取网页中的密码和文本输入框的内容

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

如何获取网页中的密码和文本输入框的内容

作者:谭昕

下载示例工程

一、介绍

网页中的密码输入框和一般不同,它没有句柄之类的,但是通过获取IE的IHTMLInputTextElement接口,就可以获取网页中的输入框(包括文本和密码输入框)的内容了。

源代码在VC知识库首页运行效果图如下:

二、具体代码

VARIANT id, index;

CComPtr<IDispatch spDispatch;

CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2 pDoc2;

CComPtr<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;jitem(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(strtype.Find("TEXT")!=-1) //获取文本框的值

{

pInputElement-get_value(&value);

CString str(value);

if(!str.IsEmpty())

m_ctrlIE.InsertItem(0, _bstr_t(value)+_bstr_t(" 【可能是用户名或其他需提交的内容】"));

}

else if(strtype.Find("PASSWORD")!=-1) //获取密码框的值

{

pInputElement-get_value(&value);

CString str(value);

if(!str.IsEmpty())

m_ctrlIE.InsertItem(0, _bstr_t(value) + _bstr_t(" 【应该是密码】"));

}

}

}

}

}

}

}

}

}

}

}注意:由于我也比较懒,本文框架是采用一篇名为《如何控制IE的行为》...在这里感谢原文作者,但是本文的主要代码是我写的,(其实自己写一个框架也太简单了,但是我还要上班啊 :( 请原谅!)最好不要向作者要技术支持!谢谢阅读!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航