悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

MFC webbrowser读取文档的meta分析

复制代码
IDispatch* pDisp = NULL;
IDispatch* pDisp2 = NULL;
IHTMLDocument2 *pHtmlDoc2 = NULL;
IHTMLElementCollection* pCol;
IHTMLMetaElement *pMeta = NULL;
BSTR bUrl = NULL;
BSTR bstr = NULL; 
try {
    if ((pDisp = m_WebBrowser.get_Document()) &&
        SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2,(PVOID*)&pHtmlDoc2)) 
        && SUCCEEDED(pHtmlDoc2->get_all( &pCol)) && pCol
        )
    {
        //检查域名是www.test.com或www.test2.com的域名下, meta标签是否有myflag标记, 如果有则认为是正确的网页bIsGoodWebPage为TRUE
        pHtmlDoc2->get_URL(&bUrl);
        if(wcsstr((const wchar_t*)bUrl, L"www.test.com") == NULL 
            && wcsstr((const wchar_t*)bUrl, L"www.test2.com") == NULL)
        {
            bIsGoodWebPage = TRUE;
        }
        else
        {
            long eleLen = 0;
            pCol->get_length(&eleLen);
            IHTMLMetaElement* pMetaElement = NULL;
            VARIANT varIndex;
            HRESULT hr;
            for( int i=0; i< eleLen; i++)
            {
                VARIANT var2;
                varIndex.vt = VT_UINT;
                varIndex.lVal = i;
                VariantInit( &var2 );
                hr = pCol->item(varIndex, var2, &pDisp2);
                hr  = pDisp2->QueryInterface(IID_IHTMLMetaElement,(void**)&pMeta);
                if( hr == S_OK)
                {
                    if( SUCCEEDED(pMeta->get_httpEquiv(&bstr)) )
                    {
                        if(!wcscmp((const wchar_t*)bstr,L"keywords"))
                        {
                            bstr = NULL;
                            if(SUCCEEDED(pMeta->get_content(&bstr)))
                            {
                                if(!wcscmp((const wchar_t*)bstr, L"myflag"))
                                {
                                    bIsGoodWebPage = TRUE;
                                    break;
                                }
                            }
                        }    
                    }
                }
            }
        }
    }
}
catch (...)
{
    WBTRACE("Error\r\n");
}
SAFE_RELEASE(pMeta);
SAFE_RELEASE(pDisp2);
SAFE_RELEASE(pHtmlDoc2);
SAFE_RELEASE(pDisp);
复制代码

 

posted on   悉野  阅读(444)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示