当前位置:  -> 首页 -> 原创文章 -> C++下使用WebBrowser进行网站自动登录

上一篇 | 下一篇
C++下使用WebBrowser进行网站自动登录
作者:洛羽叶  点击率:2522  发布时间:2013-01-17
    登录网站有两种方式,一种是采用URL提交的方式,另外一种采用POST数据的方式,鉴于很多网站的登陆在提交后有多站认证及多次跳转,采用HTTPOPENREQUEST等API的方式无法满足要求,还是要采用WebBrowser的方式模拟登陆。
    
    本文是WTL方式的WebBrowser。

    1.定义浏览器变量
    
    CAxWindow browserWindow;  
    CComPtr<IWebBrowser2> browser;  

    
2.初始化WebBrowser组件
    
    browserWindow = GetDlgItem(IDC_EXPLORER_MAIN);        
    browserWindow.QueryControl (&browser);  
    browser->put_Silent(VARIANT_TRUE);  
    browser->put_Offline(VARIANT_FALSE);        

    
3.访问登陆页面
    
    browser->Navigate(CComBSTR(
"http://www.test.com/login.php"),&v,&v,&v,&v);


    
4.在WebBrowser的事件DocumentComplete中进行登录,防止页面未加载完成进行登录
    
    
void __stdcall CMainDlg::DocumentCompleteExplorerMain(LPDISPATCH pDisp, VARIANT* URL)

    
5.获取登陆表单,填写用户名、密码,提交表单,注意要判断登陆成功后的页面完成
    
    CComVariant v;
    HRESULT hr;  
    CComPtr<IDispatch> pdispDocment;  
    CComQIPtr<IHTMLDocument2> pDocument;
    IHTMLElement *pHtmlElement;     
    CComPtr<IDispatch> pDisp = 
NULL;
    CComVariant vValue = 
"";    
    CComDispatchDriver pInputElement;
    CComDispatchDriver pInputElement1;
    CComPtr<IHTMLElementCollection> pElementCollection;
    CComQIPtr<IHTMLFormElement> pFormElement;
    IHTMLWindow2 *pWindow;  
    
bool bResult=false;
    
char buf[256]={0};


    hr = browser->get_Document(&pdispDocment);  
    
if(hr==S_OK)
    {
        pDocument = pdispDocment;  
        hr = pDocument->get_activeElement(&pHtmlElement);  
        hr = pDocument->get_parentWindow(&pWindow); 
        
if(hr==S_OK)
        {
            hr = pDocument->get_forms(&pElementCollection);
            
if(hr==S_OK)
            {
                
/* 获取表单,如果不止一个表单要做判断 */
                hr = pElementCollection->item(CComVariant(0), CComVariant(), &pDisp);
                pFormElement = pDisp;

                
if(pFormElement!=NULL)
                {
                    
/* 填写用户名 */
                    hr =pFormElement->item(CComVariant("username"), CComVariant(), &pInputElement); 
                    m_Account.GetWindowText(buf,
sizeof(buf));                       
                    vValue = buf;   
                    hr = pInputElement.PutPropertyByName(L
"value",&vValue);

                    
/* 填写密码 */
                    hr =pFormElement->item(CComVariant("password"), CComVariant(), &pInputElement1);    
                    m_Password.GetWindowText(buf,
sizeof(buf));
                    vValue = buf;   
                    hr = pInputElement1.PutPropertyByName(L
"value",&vValue);

                    
/* 提交表单 */
                    hr = pFormElement->submit();
                    bResult=
true;
                }               
            }
        }
    }
标签: C++ WEBBROWSER WTL 
引用地址:本站原创
   站点首页      技术人生      旅途足迹      我要留言      友情链接      关于站长   
[本站统计]
在线人数:1
今日访问:2
总访问量:1468586
Copyright 2006-2022 EasyWeb 1.6 订阅 All Rights Reserved
粤ICP备08028977号-1
www.luoriver.com
Created by WWH in 2006