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

翻译|其它|编辑:郝浩|2006-02-28 16:38:00.000|阅读 2564 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


下载示例工程

一、介绍
网页中的密码输入框和一般不同,它没有句柄之类的,但是通过获取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;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(" 【应该是密码】"));
       }
     }
   }
  }
 }
}
}

}

}

}
}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP