IE - могу взять HTML коды из фреймов, но не всегда. Как?
От: VMin Россия  
Дата: 23.09.04 19:18
Оценка:
Простенький код для получения HTML кодов:

IWebBrowser2* pWebBrowser = NULL;
LPDISPATCH lpDispatch;
IHTMLDocument2 *lpHtmlDocument = NULL;

HRESULT hr = GetDlgControl(IDC_EXPLORER1, __uuidof(IWebBrowser2*), (void**)&pWebBrowser);

if(pWebBrowser)
{
pWebBrowser->get_Document(&lpDispatch);
pWebBrowser->Release();
}
else return -2;

if(lpDispatch)
{
lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&lpHtmlDocument);
lpDispatch->Release();
}
else return -3;

IHTMLElement *pb=0;
BSTR p=0;
if(lpHtmlDocument)
{
IHTMLFramesCollection2* pIFrameCol;
IHTMLDocument2 * pIFrameDoc;
long pp=0;
if (SUCCEEDED(lpHtmlDocument->get_frames(&pIFrameCol)))
{
pIFrameCol->get_length(&pp);
if(pp!=0)
{
//Есть фреймы
for(long i=0;i<pp;i++)
{
VARIANT frameRequested;
VARIANT frameOut;
frameRequested.vt = VT_UINT;//VT_I4 ;
frameRequested.bstrVal = (BSTR)i;
pIFrameCol->item(&frameRequested, &frameOut);

pIFrameCol->QueryInterface(IID_IHTMLDocument2,(void**)&pIFrameDoc);

IHTMLWindow2* pIFrameWindow;
frameOut.pdispVal->QueryInterface(IID_IHTMLWindow2,
(void**)&pIFrameWindow);

pIFrameWindow->get_document(&pIFrameDoc);

if(pIFrameDoc)
{
// всё беру............ get_innerHTML()........
}
else
{
// не могу взять и как взять по другому не придумывается
}
}
}
}
}
else return -4;
//////////////// Конец КОДА /////////////////////////
Так вот! С этого сайта и большинства других все фреймы забираю без проблем
(например: http://www.rsdn.ru/?Info/Howtoask.xml)
А с другого (например: http://www.realtor.org/rodesign.nsf/pages/FS_FREALTOR?OpenDocument)
третий (последний pp==2) фрейм возвращает pIFrameDoc=0, хотя на экране всё вижу и забрать
код мышкой (по-детски) могу спокойно.

Как можно это сделать "по-взрослому"?
Подскажите другой путь, истинный путь.
Это я Вас как математик математика спрашиваю:
Что такое математика?
Один из законов Божьих или это сам Бог и есть? (ХХ век)

По-моему Математика — это Слово Божие. (22.03.05)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.