Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > WebBrowser - конец загрузки без onDocumentComplete


Автор: kr3v3tkus 2.2.2009, 15:22
Подскажите, делал разными методами, ничерта не работает, мб это изза перенаправления?
Код

WebBrowser1.Navigate('http://www.world-art.ru/search.php?name=' + value + '&global_sector=animation');
while (WebBrowser1.ReadyState < READYSTATE_COMPLETE) do Application.ProcessMessages;
ShowMessage('LocationURL');

просто повисает и даже форму не показывает

Автор: Rrader 2.2.2009, 15:30
А так не пробовали?
Код

while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
   Application.ProcessMessages;

Автор: kr3v3tkus 2.2.2009, 15:39
пробовал :( отсылает 58 байт и виснет мёртвым грузом...

Автор: Rrader 2.2.2009, 15:52
Тогда чему равен ReadyState, смотрели? А до OnDocumentComplete без проверки дело доходит?

Автор: kr3v3tkus 2.2.2009, 16:21
без проверки доходит, ReadyState сначала 1 потом 3 и на 3х дальше не идёт :( это может быть изза того, что там скрипт перенаправления?

Автор: Rrader 2.2.2009, 17:25
Тогда попробуйте
Код

while WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE do
   Application.ProcessMessages;
//...

Автор: kr3v3tkus 2.2.2009, 18:03
спасибо, так идётsmile только вот он сразу пролетает на действие после цикла ожидания, это вероятно потому, что сначала браузер грузит поисковую страничку, которая имеет особенность при совпадении с запросом сразу редиректить, таким образом браузер грузит 2 страницы, не подскажите как сделать ожидание, чтобы загрузилась 2ая страница, просто если сделать 2 цикла на ожидание, то всё равно срабатывает только на загрузь 1ой страницы :(

Автор: kr3v3tkus 3.2.2009, 21:10
В общем пока сделал так:
Код

  WebBrowser1.Navigate('http://www.world-art.ru/search.php?name=' + value + '&global_sector=animation');
  while WebBrowser1.ReadyState <> READYSTATE_INTERACTIVE do
    Application.ProcessMessages;
  page_ok := false;

  while (WebBrowser1.ReadyState <> 3)and(page_ok <> true)  do
    Application.ProcessMessages;
  sleep(8000);

  ShowMessage('ok');

Код

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  if page_ok = false then page_ok := true;

Но это конечно совсем никуда не годится... Тем более сколько бы я не ставил задержку - всё равно сначала выполняется ShowMessage('ok'), а потом отрисовывается в браузере страничка... или это отрисовка тормозит? :( В общем если кто знает метод получше - поделитесь пожалуйста smile

Автор: Rrader 4.2.2009, 09:25
kr3v3tkus, у себя попробовал такой код:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.world-art.ru/search.php?name=Hey&global_sector=all');
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  ShowMessage('Done');
end;

Когда все прогружается, сообщение показывается, т.е. все нормально. Вы в какое время этот код выполняете, при создании формы?

Автор: kr3v3tkus 4.2.2009, 10:26
эээ... да  smile а так не надо делать?  smile
зы только единственное что - мне нужна не эта страничка, а перенаправление с неё, т.е. например 
Код

WebBrowser1.Navigate('http://www.world-art.ru/search.php?name=Beck&global_sector=animation');

сначала мне выдаёт "ок" и шапку сайта, а потом начинает прорисовываться остальное... это нормально? т.е. инфо уже загрузилось в браузер и просто не успело отобразиться, и его уже можно парсить?

Автор: Rrader 4.2.2009, 11:51
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.world-art.ru/search.php?name=Beck&global_sector=animation');
  while WebBrowser1.Busy do
    Application.ProcessMessages;
  ShowMessage('Done');
end;

Автор: kr3v3tkus 4.2.2009, 11:59
упсъ ^__^ огромнейшее пасибо :3

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)