Webseite auf alle Links zugreifen mit MSHTML
-
Hallo allerseits,
ich möchte aus einer mit dem Internetexplorer eingelesenen Seite auf alle Links zugreifen können. Das Einlesen der Webseite funktioniert, das einlesen aller Links funktioniert, nur bekomme ich keinen Zugriff auf ein einzelnes Link-Element. Im folgenden Listing habe ich die Stelle markiert(siehe:???????), an der die QueryInterface-Methode nicht erfolgreich ausgeführt wird. Kann mir jemand sagen an welcher Stelle der Fehler im Listing liegt?
**********cpp-code********
void CTestDlg::OnDownloadCompleteExplorer1() { IDispatch * pDocDisp = NULL; IHTMLDocument2 *pDoc; HRESULT hr; // get the DOM //pBrowser ist mein Webbrowser(global definiert) pDocDisp = pBrowser->GetDocument(); if (pDocDisp != NULL) { hr = pDocDisp->QueryInterface(__uuidof(IHTMLDocument2), (void**)&pDoc ); if ( SUCCEEDED(hr) ) { ProcessDocument( pDoc ); } pDocDisp->Release(); } } void ProcessDocument(IHTMLDocument2* pDoc) { IHTMLElementCollection* pElemColl = NULL; HRESULT hr; hr = pDoc->get_links( &pElemColl );//die links aus dem Dokument auslesen if ( SUCCEEDED(hr) ) { ProcessElementCollection( pElemColl ); pElemColl->Release(); } } void ProcessElementCollection(IHTMLElementCollection* pElemColl) { HRESULT hr; IDispatch* pElemDisp = NULL; IHTMLElement* pElem = NULL; _variant_t idx=long(0); hr = pElemColl->item( idx, idx, &pElemDisp ); if ( SUCCEEDED(hr) ) { hr = pElemDisp->QueryInterface( __uuidof(IHTMLElement), (void**)&pElem ); if ( SUCCEEDED(hr) ) { IHTMLLinkElement *pLinkElem; hr = pElemDisp->QueryInterface( __uuidof(IHTMLLinkElement), (void**)&pLinkElem ); //????????? hier scheitert QueryInterface //ich habe in der HTMLCollection auf das 0-te Element //zugegriffen, was auch funktioniert, aber ich kann es //per QueryInterface auf ein HTMLLinkElement abbilden if ( SUCCEEDED(hr) ) { BSTR mystr; pLinkElem->get_href(&mystr); } pElem->Release(); } pElemDisp->Release(); } }
-
Laut MSDN liefert IHTMLDocument2::get_links nicht nur Link- sondern auch Area-Elemente.
-
hmmm, das erklärt aber nicht das Scheitern der Query...die Collection enthält 3 Elemente, genauso viel wie Links auf der Seite vorhanden sind...ich hab schon mal die MSDN durchforstet, bin aber zu keinem Ergebnis gekommen.
Ich hab das ganze mal mit get_body und innertext probiert, das hat funktioniert, da konnte ich den text des html-dokuments anzeigen, also scheint es ja prinizipiell zu funktionieren.
wenn ich nur wüsste warum die query nicht funktioniert...??????
lvmh
-
Bist Du wirklich sicher, dass Du die <LINK>-Tags haben willst (die AFAIK nur im Header der Seite stehen dürfen), und nicht die <A>-Tags? Die bekommst Du über IHTMLAreaElement.
-
ich werd es mal mit den area elements probieren, das wär ne idee...!!!
gruss, lvmh