Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: WebBrowser, фреймы и парсинг. Пустой фрейм. Как?  (Прочитано 4369 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« : 02-10-2009 05:30 » 

Захотел я в своём приложении открыть сайт, покликать по ссылочкам и собрать нужную мне информацию.

Но сайт содержит один только фрейм, у которого почему-то нет (с точки зрения контрола WebBrowser) детей, и список All у него тоже пустой. Это несмотря на то, что браузер корректно отображает весь контент фрейма и вручную мышом я добираюсь до нужных данных. Что я делаю не так?

На страничке даже нет BODY, а сразу FRAME, содержащий только "<FRAME src=\"/jsp/index.jsp\">". Насколько я помню, MFC давала парсить даже динамический контент, а тут такая вот глупость..
Код:
        public RPO_Mon(){
            InitializeComponent();
            _wb.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(_wb_DocumentCompleted);
            _btnParse.Enabled = false;
        }

        private void _btnGo_Click(object sender, EventArgs e){
            _wb.Navigate("info.russianpost.ru");
        }

        private void _wb_DocumentCompleted(object sender,
            WebBrowserDocumentCompletedEventArgs e){
            _btnParse.Enabled = true;
        }

        private void _btnParse_Click(object sender, EventArgs e){Parse();}

        private void Parse(){
            foreach (HtmlElement HE in _wb.Document.All)
                if (HE.TagName == "FRAME")
                    ParseFrame(HE.All);
        }

        private void ParseFrame(HtmlElementCollection HEC){
            foreach (HtmlElement HE in HEC)
                if (HE.InnerText == "Операционный мониторинг")
                    MessageBox.Show("Let it be");
        }

Записан

Ложки нет. See MSDN for details.
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #1 : 02-10-2009 06:54 » 

Пропарсить документ на фреймы. Для этого:
1. Получить интерфейс IOleContainer документа
IHtmlDocument2->QueryInterface (IID_IOleContainer, 
2. Получить объект перечислителя
IOleContainer->EnumObjects (OLECONTF_EMBEDDINGS, &pEnumUnk)
3. Перечислять енумобъекты
pEnumUnk->Next
4. С каждого полученного объекта олеконтейнера получать интерфейс IWebBrowser2
Unk->QueryInterface (IID_IWebBrowser2
5. Получаешь документ IHtmlDocument2 полученного вебброузера, то бишь фрейма.
« Последнее редактирование: 02-10-2009 06:57 от zubr » Записан
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 19-10-2009 17:55 » 

Спасибо за ответ.
Попробовать не довелось - меняю работу, задачка потеряла актуальность, но как всё устаканится - отработаю указанный подход, расскажу, что получилось.
Записан

Ложки нет. See MSDN for details.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines