Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2096352
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 21:39:15

一起学习
如何获取网页中的密码和文本输入框的内容
作者:谭昕

下载示例工程

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

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



二、具体代码

	VARIANT id, index;

	CComPtr spDispatch;

	CComQIPtr pDoc2;

	CComPtr pElement;

	CComPtr pElementCol;

	CComPtr pFormElement;

	CComPtr 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(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的行为》...在这里感谢原文作者,但是本文的主要代码是我写的,(其实自己写一个框架也太简单了,但是我还要上班啊 :( 请原谅!)最好不要向作者要技术支持!谢谢阅读!

下载本文示例代码


如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容如何获取网页中的密码和文本输入框的内容
阅读(361) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~