程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 如何獲取網頁中的密碼和文本輸入框的內容

如何獲取網頁中的密碼和文本輸入框的內容

編輯:關於VC++

一、介紹

網頁中的密碼輸入框和一般不同,它沒有句柄之類的,但是通過獲取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(" 【應該是密碼】"));
                              }
                            }
                        }
                    }
                }
              }
          }

        }

      }

    }
  }

注意:由於我也比較懶,本文框架是采用一篇名為《如何控制IE的行為》...在這裡感謝原文作者,但是本文的主要代碼是我寫的,(其實自己寫一個框架也太簡單了,但是我還要上班啊 :( 請原諒!)最好不要向作者要技術支持!謝謝閱讀!

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved