Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дождаться выполнения скрипта. [D7]


Страницы:   1 2 3

Mach3 ©   (2011-11-01 08:20:00) 

Привет. Пытаюсь загрузить страничку, кликнуть по "кнопке" и после получить нужный контент. Но как дождаться окончания выполнения Java скрипта не знаю.
WebBrowser1.Navigate(' http://www.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 содержалось значение после выполнения скрипта..


sniknik   (2011-11-01 10:05:00) [41]

> ваш код тоже не сработал..
а он и де должен, у него другая задача - показать, что id show_contacts там нет.

> это не адрес.. это его кусок.. =))
ну и кого ты в итоге обманул?

++
сбор личных данных незаконен.


Mach3   (2011-11-01 10:00:00) [42]


> http://www.ru

это не адрес.. это его кусок.. =))


Mach3   (2011-11-01 09:59:00) [43]

ваш код тоже не сработал..


sniknik   (2011-11-01 09:58:00) [44]

> посмотреть снифером
какие вы сложные...
а чем браузер не подходить?
http://www.ruперенаправляется на http://www.ru/rus/index.phpи это видно прямо в заголовке браузера.


Mach3   (2011-11-01 09:56:00) [45]

а.. да пожалуйста..
http://ussuriisk.drom.ru/toyota/succeed/6054110.html


Mach3   (2011-11-01 09:54:00) [46]


> что мешает дать "прямой" адрес?

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


sniknik   (2011-11-01 09:54:00) [47]

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

var
 Elem: Variant;
begin
 WebBrowser1.Navigate(' http://www.ru');

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

 Elem:= WebBrowser1.OleObject.Document.getElementByID('show_contacts');
 if not VarIsClear(Elem) then begin
   Elem.click;
   Memo1.Text:= Elem.innerHTML;
 end;
end;


Mach3   (2011-11-01 09:50:00) [48]


> Когда выполнится скрипт на этой странице?

в JS не разбираюсь, но предположу что тут бесконечный цикл с изменением ГИФА каждую 1000ms.. следовательно никогда..

> Проверяй по таймеру - жди, когда будет какой-то известный
> для конкретной страницы признак завершения работы скрипта.
>

по таймеру-то все норм.. так и делал..
не могу понять, почему следующий код не работает
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);


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


sniknik   (2011-11-01 09:39:00) [49]

для конкретно данного кода(страницы)... там нет скриптов, там есть пере направление (302).
что мешает дать "прямой" адрес?


Омлет   (2011-11-01 09:25:00) [50]

> Mach3   (01.11.11 09:13) [2]

Проверяй по таймеру - жди, когда будет какой-то известный для конкретной страницы признак завершения работы скрипта.


Омлет   (2011-11-01 09:13:00) [51]

http://js.aceweb.ru/users/4/index/2/index.html
Когда выполнится скрипт на этой странице?


Mach3   (2011-11-01 09:13:00) [52]

ммм.. не совсем понял..
если выполнить вышеприведенный мною код, то в S будет содержться контент, как если бы WebBrowser1.OleObject.Document.getElementByID('show_contacts').click;не выполнялось.
короче, надо как-то подождать пару секунд, после чего выполнять
S:= WebBrowser1.OleObject.Document.getElementByID('show_contacts').innerHTML;

пробовал после 'клика' запускать подобный цикл:

repeat
sleep(1000);
S := WebBrowser1.OleObject.Document.getElementByID   ('show_contacts').innerHTML;
until Pos('+7',S) > 0;

помогло только после клика запустить таймер и по таймеру получить значение в S.
но это бредятина..
неужели никак нельзя отследить завершение выполнения WebBrowser1.OleObject.Document.getElementByID('show_contacts').click;


sniknik   (2011-11-01 08:55:00) [53]

> Необходимо, чтобы в S содержалось значение после выполнения скрипта..
в общем случае не получится... в веб приложениях (не странички с вкраплениями скриптов) скрипты никогда не заканчивают выполнятся... взаимодействуют с клиентом, по его реакции ветвятся и размножаются... ;)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо