0

在互联网上搜索大量后,我们发现以下代码仅将网页的正文部分加载到 Web 浏览器控件上

IPIEHTMLDocument2 *pHTMLDocument;

IPIEHTMLElement* pBodyElement; 

CComPtr<IDispatch> spDispDoc;

HRESULT res = m_spWebBrowser2->get_Document(&spDispDoc);


if(SUCCEEDED(res))
{
    spDispDoc->QueryInterface( __uuidof(IPIEHTMLDocument2), (void**)&pHTMLDocument);

    WCHAR szText[256];
    DISPID id;
    OLECHAR FAR* szTemp;

    // store "body"
    szTemp = szText;
    StringCchPrintf(szText, 256, L"body", id);

    // get the body
    pHTMLDocument->GetIDsOfNames(IID_NULL, &szTemp, 1, LOCALE_USER_DEFAULT, &id);

    VARIANT varResult;
    varResult.vt = VT_DISPATCH;
    VARIANT FAR *pVarResult = &varResult;
    DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};

    pHTMLDocument->Invoke(id, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispparamsNoArgs, pVarResult, NULL, NULL);

    BSTR bodyValue;

    if( NULL != pVarResult->pdispVal)
    {
        pVarResult->pdispVal->QueryInterface(IID_IPIEHTMLElement, (void**)&pBodyElement);

        pBodyElement->get_innerHTML(&bodyValue);
    }         
} 

但是现在我们如何从加载的网页中获取剩余的 head 和其他标签文档文本,即使我们尝试将“head”字符串传递给 GetIDsOfNames() 方法并且它传递了失败值,所以我们感到震惊。请向我们提供在 windows mobile 6.0 中访问/提取整个网页内容的方法

谢谢,拉曼南德·巴特。

4

1 回答 1

0
void  CBrowserWindow::ExtractWebPageDoc()

{
HRESULT                         hrResult           = E_FAIL;    
IDispatch                      *pIDisp             = NULL;
IPIEHTMLDocument3              *pIHTMLDocument     = NULL;
IPIEHTMLElementCollection      *pHTMLElementcol    = NULL;
IPIEHTMLImgElement             *pHTMLImgElement    = NULL; 


hrResult = m_spIWebBrowser2->get_Document( &pIDisp);
if (NULL != pIDisp)
{
    hrResult = pIDisp->QueryInterface( __uuidof(IPIEHTMLDocument3), (void**)&pIHTMLDocument);
    if( NULL != pIHTMLDocument)
    {
        IPIEHTMLElement* pElement = NULL;
        CComBSTR pHTMLElement;

        hrResult = pIHTMLDocument->get_documentElement( &pElement);
        if (SUCCEEDED(hrResult)) 
        {                               
            pElement->get_innerHTML(&pHTMLElement.m_str);
            SaveToHTMLFile( pHTMLElement);
        }

        hrResult = pIHTMLDocument->get_images( &pHTMLElementcol);
        if (NULL != pHTMLElementcol)
        {
            CComBSTR  strImage;
            VARIANT vtBase, vtIndex;
            long pHTMLElementCollectionLength = 0;

            VariantInit( &vtBase);
            vtIndex.vt = VT_UINT;

            hrResult = pHTMLElementcol->get_length( &pHTMLElementCollectionLength);
            for (int ilen = 0; ilen < (int)pHTMLElementCollectionLength ; ilen++)
            {           
                vtIndex.lVal = ilen;

                pIDisp = NULL;
                hrResult =  pHTMLElementcol->item( vtBase, vtIndex , &pIDisp);
                if (NULL != pIDisp)
                {
                    hrResult = pIDisp->QueryInterface( __uuidof(IPIEHTMLImgElement), (void**)&pHTMLImgElement);

                    if (NULL != pHTMLImgElement)
                    //CComQIPtr<IPIEHTMLImgElement> imgElement( pIDisp);
                    //imgElement->get_src( &strImage.m_str);    //I get it here :)
                    pHTMLImgElement->get_src( &strImage.m_str);
                }
            }
        }
    }
}

}

上面提到的代码在 windows 移动设备中获取整个网页内容。

于 2009-12-10T10:18:29.627 回答