IWebBrowser2 - Quelltext anzeigen



  • Hallo,

    wie kann ich den HTML-Quelltext einer Seite von einem IWebBrowser2 Control anzeigen?



  • @Ryson, soweit ich weiß musst du dir von deinem Browser-Objekt das dazugehörige IHTMLDocument2 geben lassen. Von dort aus solltest du auf den Quelltext der jeweiligen Seite zugreifen können. Habe nur gerade keinen Beispielcode zur Hand.



  • Danke Herrmann, das hat mich schon ein ganzes Stück weiter gebracht.
    Den Quelltext kann ich nun abfragen, allerdings nur den body-Teil.
    Wie erhalte ich den kompletten Code?

    HRESULT		hr;
    	IDispatch		*htmlDisp	= NULL;
    	IHTMLDocument2	*doc		= NULL;
    	IHTMLElement	*element	= NULL;
    
    	hr = pIwb->get_Document(&htmlDisp);
    
    	if( FAILED(hr) && htmlDisp == NULL )
    	{
    		return E_FAIL;		
    	}
    
    	hr = htmlDisp->QueryInterface(IID_IHTMLDocument2, (void**)&doc);
    
    	if( FAILED(hr) && doc == NULL )
    	{
    		htmlDisp->Release();
    		return E_FAIL;	
    	}
    
    	hr = doc->get_body(&element);
    
    	if( FAILED(hr) && element == NULL )
    	{    
    		htmlDisp->Release();
    		doc->Release();
    		return E_FAIL;	
    	}
    
    	hr = element->get_outerHTML(html);
    
    	htmlDisp->Release();
    	doc->Release();
    	element->Release();
    
    	if( FAILED(hr) )
    	{    
    		return E_FAIL;	
    	}
    


  • Guck Dir mal die anderen IHtmlDocument-Interfaces an. Jedes Interface hat bestimmte Funktionen, die im anderen nicht vorkommen.



  • Ja. Danke. 🙂
    Es ist umständlich.
    Hier die gekürzte Fassung...

    (BSTR* source, BOOL bPlainText)
    
    	IWebBrowser2 *pIwb	 = NULL;
    
    	HRESULT hr;
    
    	IDispatch	 *pHTMLDisp = NULL;
    	IHTMLDocument2 *pHTMLDoc = NULL;
    	IHTMLElementCollection *pHTMLCollection = NULL;
    
    	IDispatch	 *pTAGDispatch = NULL; 
    	IHTMLElementCollection *pTAGCollection = NULL;
    
    	IDispatch *pItemDispatch = NULL; 
    	IHTMLElement *pItemHTML = NULL; 
    
    	hr = pIwb->get_Document(&pHTMLDisp);
    
    	...
    	hr = pHTMLDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDoc);
    
    	...
    	hr = pHTMLDoc->get_all(&pHTMLCollection);
    
    	...
    	hr = pHTMLCollection->tags(CComVariant( "HTML" ), &pTAGDispatch);
    
    	...
    	hr = pTAGDispatch->QueryInterface(IID_IHTMLElementCollection, (void**)&pTAGCollection);
    
    	...
    	hr = pTAGCollection->item(CComVariant( 0L ), CComVariant(), &pItemDispatch);
    
    	...	
    	hr = pItemDispatch->QueryInterface(IID_IHTMLElement, (void**)&pItemHTML);
    
    	...
    	if( bPlainText )
    	{
    		pItemHTML->get_outerText(source);
    	}
    	else
    	{
    		pItemHTML->get_outerHTML(source);
    	}
    

Anmelden zum Antworten