Как я могу получить содержимое фрейма с помощью mshtml? - PullRequest
2 голосов
/ 27 ноября 2008

Вот проблема:

У меня есть хук в IE, который реагирует на событие WebBrowser.OnNavigateComplete2, чтобы проанализировать содержимое документа на предмет точной информации.

Этот документ содержит фреймы, поэтому я смотрю на HTMLDocument.frames. Для каждого я просматриваю свойство document.body.outerHTML для проверки содержимого.

Проблема в том, что искомая строка там никогда не отображается, тогда как она отображается на странице финала. Итак, я смотрю не в том месте? Если он отображается, когда страница полностью загружена, то он загружается в какой-то момент, верно? Но на какой объект мне смотреть?

Кстати, я не знаю, имеет ли это какое-либо значение, но страница, которую я ищу, получена из приложения ASP.NET.

public void OnNavigateComplete2(object pDisp, ref object url)
{
    document = (HTMLDocument)webBrowser.Document;

    mshtml.FramesCollection frames = document.frames;
    for (int i = 0; i < frames.length; i++)
    {
        object refIdx = i;
        IHTMLWindow2 frame = (IHTMLWindow2)frames.item(ref refIdx);
        string frameContent = frame.document.body.outerHTML;
    }
}

Спасибо за вашу помощь.


@ бараны Это событие запускается много раз для каждой страницы, поэтому я решил, что это происходит каждый раз при загрузке рамки, даже если мне не удается поймать ту, которую я ищу. Если нет, то каким было бы событие для захвата содержимого фреймов?

То, что я хочу сделать, это обнаружить некоторую точную информацию в конкретном кадре, а затем сохранить ее. позже загружается веб-страница, вызванная некоторыми действиями пользователя, где мне нужна информация, полученная при разборе фрейма.

Ответы [ 3 ]

2 голосов
/ 04 декабря 2008

Знаете ли вы имя / идентификатор кадра, который вы ищете для контента? Если да, то в вашем событии navigateComplete2 вы можете получить ссылку на фрейм, например

iFrame frm = document.frames(<your frame id>);

int readyState=0;

while(frm.readystate !=4){
// do nothing. be careful to not create an endless loop
}

if(frm.readyState==4){
   // get your content now
}

НТН

0 голосов
/ 01 декабря 2008

Причина, по которой ваша строка не отображается, из-за рамки. Элемент управления веб-браузера запускает событие завершения документа после загрузки основного документа. На данный момент кадры еще не запросили свои источники. После анализа документа с помощью элемента управления веб-браузера возникают проблемы и загружаются запросы на источники фреймов.

Не могли бы вы описать, что вы пытаетесь достичь?

0 голосов
/ 27 ноября 2008

Используете ли вы какие-то потоки? Запуск браузера в отдельном потоке все портит. Попробуйте выполнить его в STAThread и проверьте, получите ли вы правильный результат.

...