Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Дождаться выполнения скрипта.


Автор: Mach3 1.11.2011, 05:57
Привет. Пытаюсь загрузить страничку, кликнуть по "кнопке" и после получить нужный контент. Но как дождаться окончания выполнения Java скрипта не знаю.

Код

 WebBrowser1.Navigate('http://yandex.ru');

 while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
 WebBrowser1.OleObject.Document.getElementByID('show_contacts').click; 

 S:= WebBrowser1.OleObject.Document.getElementByID('show_contacts').innerHTML; 


Необходимо, чтобы в S содержалось значение после выполнения скрипта..


Автор: Alexeis 1.11.2011, 09:12
Сработает обработчик OnDocumentComplete после исполнения скрипта насколько я помню. 

Автор: Mach3 1.11.2011, 09:16
пробовал.. но попробую еще раз..
спс.

Добавлено через 11 минут и 45 секунд
Не срабатывает!

Автор: Alexeis 1.11.2011, 10:01
По ходу на яндексе нет элемента с ID 'show_contacts'


Автор: Mach3 1.11.2011, 10:20
эм.. не яндекс..
http://tyumen.drom.ru/chevrolet/lacetti/6055456.html

Добавлено через 3 минуты и 34 секунды
пробовал по таймеру получить S. Все норм..
не могу понять, почему следующий код не работает
Код

repeat
  sleep(1000);
  S:= WebBrowser1.OleObject.Document.getElementByID('show_contacts').innerHTML;
    memo1.Lines.Add('NOT_READY')
 until  pos('+7',S) > 0;
memo1.Lines.Add(s);


в браузере контакты уже открылись, а значение не изменилось..
буд-то старые данные юзает..

Автор: Snowy 1.11.2011, 10:53
Цитата(Mach3 @  1.11.2011,  10:20 Найти цитируемый пост)
не могу понять, почему следующий код не работает
Потому что Sleep(1000) не делает паузу на секунду, а засыпает тред на секунду.
А, поскольку твоё приложение выполняется в одном треде, то засыпает всё. В том числе и браузер.
Попробуй крутить секунду Application.ProcessMessages. Возможно это сработает:
Код

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

Автор: Mach3 1.11.2011, 15:45
Код

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

 WebBrowser1.OleObject.Document.getElementByID('show_contacts').click;
 
 repeat
  S:= WebBrowser1.OleObject.Document.getElementByID('show_contacts').innerHTML;
  if pos('+7',S) > 0 then
   memo1.Lines.Add(s)
  else
   memo1.Lines.Add('NOT_READY');
   Application.ProcessMessages();
 until  pos('+7',S) > 0;
 memo1.Lines.Add(s);


Так вроде работает..
Спасибо.

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