Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 11:53   #1
KapeLLaN
Пользователь
 
Регистрация: 13.02.2008
Сообщений: 12
По умолчанию CppWebBrowser момент окончания полной загрузки страницы

Здравствуйте.Я по форуму находил данную тему, но бурного обсуждения не обнаружил...

Пишу автокликер, все хорошо,только вот не могу уловить окончание загрузки страницы.Пробовал:

1.
Код:
CppWebBrowser1->Navigate(WideString("http://www.aaa.sss"));
  while(CppWebBrowser1->ReadyState < 4)
  {
    if(CppWebBrowser1->ReadyState == 0)
    {
    Label1->Caption = "Запрос не инициализирован";
    Application->ProcessMessages();
    }
      if(CppWebBrowser1->ReadyState == 1)
      {
      Label1->Caption = "Запрос создан";
      Application->ProcessMessages();
      }
        if(CppWebBrowser1->ReadyState == 2)
        {
        Label1->Caption = "Запрос послан";
        Application->ProcessMessages();
        }
          if(CppWebBrowser1->ReadyState == 3)
          {
          Label1->Caption = "Запрос обрабатывается";
          Application->ProcessMessages();
          }
  }/// end while
Label1->Caption = "Запрос завершен";
Application->ProcessMessages();
///таймер и т.д. и т.п.
При нормальной скорости работает,но как только скорость падает фреймы не успевают подгрузиться - таймеры накладываються и т.д.
Т.е. для индикации окончания загрузки не подходит.

2.
Код:
while(CppWebBrowser1->Busy)
Application->ProcessMessages();
Как будто этих строк в коде и нет...(таймер начинает идти почти моментально)


3.

Код:
[__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
CppWebBrowser1->Navigate(WideString("http://www.aaa.sss"));
Label1->Caption = "Загрузка завершена";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CppWebBrowser1NavigateComplete2(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL)
{
if (!CurDispatch)
    CurDispatch = pDisp; // save for comparison

}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL)
{
 if (pDisp == CurDispatch)
  {
    // the document is loaded, not just a frame
    CurDispatch = NULL; //clear the global variable
  }
  else
  {
  Label1->Caption = "Загрузка не удалась";
  }
}
Это пример из справки BCB6.Тот же результат.

В принципе можно поставить задержку на n секунд,я так и делал.Но проблемы когда
Код HTML:
DNS lookup failed
           This message was created by winroute proxy
или когда страница отсутствует на сервере и т.д и т.п. это не решает.
Если кто сталкивался с подобной проблемой,т.е. точное полное успешное/неуспешное окончание загрузки страницы, подскажите пожалуйста.
KapeLLaN вне форума Ответить с цитированием
Старый 26.02.2010, 17:35   #2
KapeLLaN
Пользователь
 
Регистрация: 13.02.2008
Сообщений: 12
По умолчанию

Вобщем нашел ответ на свой вопрос - он заключался в кривизне рук...
Пример в справке BCB6 работоспособный.

Для проверки ошибки навигации (отсутствия страницы) необходимо использовать NavigateError.
Правда есть один нюанс. Событие
Код:
CppWebBrowser1->Navigate
не дожидаеться выполнения (полного выполнения) событий
Код:
CppWebBrowser1NavigateComplete2
и
Код:
CppWebBrowser1DocumentComplete
т.е. выполняются операторы следующие за
Код:
CppWebBrowser1->Navigate
Поэтому я вставил
Код:
download_flag_cppweb1
в роли флага окончания загрузки.Это особенно заметно когда
Код:
CppWebBrowser1->Navigate
идет в цикле.Кстати для индикации ошибки надо сделать тоже самое.

Код:
/*****************************************************************/
bool  download_flag_cppweb1 ;
/****************************************************************/
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
download_flag_cppweb1 = false;
CppWebBrowser1->Navigate(WideString("http://www.ссс.ууу"));
while( !download_flag_cppweb1 )
//////операторы
}

void __fastcall TForm1::CppWebBrowser1NavigateComplete2(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL)
{
if (!CurDispatch)
    CurDispatch = pDisp; // save for comparison
    Label1->Caption = "Запрос страницы завершен";
   Application->ProcessMessages();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL)
{
if (pDisp == CurDispatch)
  {
  Label1->Caption = "Документ полностью загружен";
  Application->ProcessMessages();
  CurDispatch = NULL;
  download_flag_cppweb1 = true;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CppWebBrowser1NavigateError(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL, Variant *Frame, Variant *StatusCode,
      VARIANT_BOOL *Cancel)
{
Label1->Caption = "Ошибка загрузки документа";
Application->ProcessMessages();
}
Всем спасибо.

Последний раз редактировалось KapeLLaN; 26.02.2010 в 17:38.
KapeLLaN вне форума Ответить с цитированием
Старый 15.09.2015, 16:22   #3
mclaren_dp
Новичок
Джуниор
 
Регистрация: 14.09.2015
Сообщений: 1
По умолчанию

Добрый день. Бьюсь над подобной задачей не первую неделю. Ни один вариант не дожидается полной загрузки страницы. При использовании Вашего кода, программа входит в бесконечный цикл даже не выводя окно на экран. Не могу понять что делаю не так Буду благодарен за любую подсказку !
mclaren_dp вне форума Ответить с цитированием
Старый 15.09.2015, 18:51   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

С флагом действия перепроверьте. А то в случае ошибки он не сбрасывается и попадёте в бесконечный цикл в ожидании правильного флага.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка окончания загрузки страницы в WebBrowser Vladimir K. Работа с сетью в Delphi 8 31.10.2010 19:20
CppWebBrowser, проблема поймать завершение загрузки страницы Time Общие вопросы C/C++ 0 22.08.2009 23:37
Предварительная загрузка страницы со статусом загрузки sdeman JavaScript, Ajax 1 20.08.2009 15:46
Время загрузки страницы и кол-во запросов к БД Jensi PHP 1 07.05.2009 14:10
ошибка загрузки страницы Vitek-pm Общие вопросы C/C++ 0 01.03.2009 01:11