想做个过滤程序,但不知道怎么获取IE内核的浏览器的网页内容,比如TT,360之类的,我看有一些杀毒软件无论什么浏览器都能获取其网页内容,请问一下就是怎么实现的?

解决方案 »

  1.   

    获取IE浏览器上的文本,VS2005编译通过。// InternetExplorer_Server_Text.cpp : 定义控制台应用程序的入口点。
    //#include "stdafx.h"#include <mshtml.h> 
    #include <atlbase.h> 
    #include <oleacc.h>
    #include <string>
    #include <comdef.h>
    #include <stdio.h>
    using std::string; 
    int _tmain(int argc, _TCHAR* argv[])
    {
        CoInitialize(NULL);    
        CComPtr<IHTMLDocument2> pDoc2;
        HINSTANCE hinst=::LoadLibrary("OLEACC.DLL");
        string strTemp="";        if(hinst!=NULL) 
        {
            
            LRESULT lres;
            UINT unMsg=::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
            ::SendMessageTimeout((HWND)0x00020C0E,unMsg,0L,0L,SMTO_ABORTIFHUNG,1000,(DWORD*)&lres);
            LPFNOBJECTFROMLRESULT pfObjectFromLresult=(LPFNOBJECTFROMLRESULT)::GetProcAddress(hinst,_T("ObjectFromLresult"));
            
            
            if(pfObjectFromLresult!=NULL) 
            {
                
                HRESULT hres;
                
                hres=(*pfObjectFromLresult)(lres,IID_IHTMLDocument2,0,(void**)&pDoc2);
                            if(SUCCEEDED(hres)) 
                {
                    
                    CComPtr<IHTMLElement> pHtmlElem;                
                    hres=pDoc2->get_body(&pHtmlElem);                
                    BSTR bstrText=NULL;                
                    pHtmlElem->get_innerText(&bstrText);                
                    _bstr_t _bstrTemp(bstrText,false);
                    
                    strTemp = (char*)_bstrTemp;               
                    
                }
                            
            }        
            ::FreeLibrary(hinst);
            
        }
        CoUninitialize();
        printf("%s\n", strTemp.c_str()); 
        return 0;
    }
      

  2.   

    谢谢,但我发现一个问题,我替换完后,用pHtmlElem->put_innerText(&bstrText); 发现网页是彻底改变了,比如提交表单会失败这样的,请问有什么方法可以解决么?
      

  3.   

    用windows 的spi/lsp方式获取网页内容,并对内容进行修改 。
    实现方式如下:
               1.  用WSPSend解析IE请求的URL,记录对应的socket ;
             2. 用WSPRecv接收数据并对数据解析和解码,分析网页内容,修改和添加自定义内容 ;刚好目前我也在做你同样的事情 ;  API可以参考MSDN windows sockets 2=> windows sockets spi reference .
               
     
             
      

  4.   

    这个够底层!hehe,而且适用于“所有”浏览器。只是有个缺点,对于通过脚本动态生成的网页内容就有困难了。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  5.   

    谢谢,这个对HTTP的网页可以,但HTTPS这种加密的似乎不行吧,我用WPE截,全是乱码,不知道怎么解开。
      

  6.   

    我只是替换了几个字符 ,就不知道为什么ActiveX控件用不了了,是个编辑控件来的,我怀疑是源码重新加载了,但控件没有被初始化吧
      

  7.   

    这个当然不能简单地这么“替换”了,你这样相当于把整个网页都设置成纯文本的了。应该是找到具体的 HTML 元素对象(比如一个 span 或者一个 div),然后替换其文本内容。如果是在 IE 的 HTML 里做文本的查找替换,最好是用 TextRange 对象的相关操作。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  8.   

    不好意思 ,上面打错了
    应该是put_innerHTML
    不好意思,给你带来麻烦了
      

  9.   

    en, 你这个倒是没有搞成“纯文本”,但也是相当于页面内容重新装载了,而脚本之类的东西却未必能重新装载(比如 onload 的代码就不会从头执行),所以页面表现不正常也就可以理解了。要做文字过滤和替换,最好还是对 DOM 进行遍历。这种“一总替换”的方式终究是不妥,hehe
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  10.   

    我想也应该是控件没有这初始化,请问哪里有VC DOM的文档?我研究一下,谢谢了
      

  11.   

    请教一下如果用你的方法WSPRecv接收数据,可以解出HTTPS的内容么?
      

  12.   

    HTTPS本身就是加密安全协议,自然很多内容是不能让你解析的
      

  13.   

    HTTPS本身就是安全加密协议,它的内容自然不能让你轻易解析
      

  14.   

    HTTPS本身就是安全加密协议,它的内容自然不能让你轻易解析
      

  15.   

    IE有办法解析SSL加密,相信在WSPRecv也有办法解析。
      

  16.   


    浏览器有办法解析SSL加密,相信在WSPRecv也有办法解析。难点是得知道密钥!