Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.12;
Скачать: CL | DM;

Вниз

Дождаться выполнения скрипта.   Найти похожие ветки 

 
Mach3   (2011-11-01 08:20) [0]

Привет. Пытаюсь загрузить страничку, кликнуть по "кнопке" и после получить нужный контент. Но как дождаться окончания выполнения 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 08:55) [1]

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


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

ммм.. не совсем понял..
если выполнить вышеприведенный мною код, то в 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;


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

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


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

> Mach3   (01.11.11 09:13) [2]

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


 
sniknik ©   (2011-11-01 09:39) [5]

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


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


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

в 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:54) [7]

> не могу понять, почему следующий код не работает
может потому, что ты нас обманываешь?  
по данному адресу вообще нет элемента с 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:54) [8]


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

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


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

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


 
sniknik ©   (2011-11-01 09:58) [10]

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


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

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


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


> http://www.ru

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


 
sniknik ©   (2011-11-01 10:05) [13]

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

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

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


 
Омлет ©   (2011-11-01 10:10) [14]

> sniknik ©   (01.11.11 10:05) [13]
> сбор личных данных незаконен.


В России-то? )


 
Mach3   (2011-11-01 10:11) [15]

обманывать никого и не собирался..
сбор?!! спам меня не интересует..


 
Mach3   (2011-11-01 10:12) [16]

так решения отличного от использования таймера не придвидится?


 
Омлет ©   (2011-11-01 10:37) [17]

> Mach3   (01.11.11 10:12) [16]
> так решения отличного от использования таймера не придвидится?


Используй Selenium.


 
Медвежонок Пятачок ©   (2011-11-01 10:38) [18]

убрать делфи.
взять например хром.
+ юзер скрипты
+ евент на изменение дива addEventListener("DOMSubtreeModified"....


 
sniknik ©   (2011-11-01 10:56) [19]

> обманывать никого и не собирался..
не собирался, но обманул... на автомате. страааашный человек...

> убрать делфи.
оставить дельфи, убрать WebBrowser, посмотреть как с скрипте формируется запрос для аякс... (простой get на ....php с параметрами), и вызывать его самому, чем угодно хоть indy (сначала естественно оригинальную страничку... но судя по приведенной ссылке с кодом, она уже есть). там сразу будет телефон...


 
Омлет ©   (2011-11-01 10:58) [20]

http://ussuriisk.drom.ru/auto/?_=1320134266513&bull_id=6054110&obj=show_contacts&crossdomain_ajax_request=2&re quest=ajax_show_contacts


 
Омлет ©   (2011-11-01 10:58) [21]

Пробел надо убрать, ссылка разорвалась.


 
Медвежонок Пятачок ©   (2011-11-01 11:44) [22]

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


 
Mach3   (2011-11-01 15:05) [23]

http://ussuriisk.drom.ru/auto/?_=1320134266513&bull_id=6054110&obj=show_contacts&crossdomain_ajax_request=2&re  quest=ajax_show_contacts

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

Если послать этот запрос, контакты вернуться верными за исключением кода оператора.

А как получить _=1320134266513 я не догадался..


 
Омлет ©   (2011-11-01 15:12) [24]

> А как получить _=1320134266513 я не догадался..

Это похоже на timeStamp.


 
Mach3   (2011-11-01 15:26) [25]

т.е. получить его невозможно?


 
Mach3   (2011-11-01 15:34) [26]


> на автомате. страааашный человек...

не суди.. и не судимым будешь..


 
Омлет ©   (2011-11-01 15:40) [27]

> т.е. получить его невозможно?

Возможно. Это текущая дата/время в формате unix time (1320134266513), плюс миллисекунды - 3 цифры в конце (1320134266513).


 
Омлет ©   (2011-11-01 15:43) [28]

Да и вообще, этот параметр можно не передавать.
Так запрос тоже работает:
http://ussuriisk.drom.ru/auto/?bull_id=6054110&obj=show_contacts&crossdomain_ajax_request=2&request=ajax_show_ contacts

И даже так работает:
http://ussuriisk.drom.ru/auto/?bull_id=6054110&request=ajax_show_contacts&crossdomain_ajax_request=2


 
sniknik ©   (2011-11-01 15:48) [29]

> не суди.. и не судимым будешь..
не обманывай... и не ... (вставить любую банальность. по желанию). отношение будет другое.

> Возможно.
а зачем? ;)


 
Mach3   (2011-11-01 15:52) [30]

НЕ РАБОТАЕТ..
Переходя по ссылкам получаем номер +7 (956) 717-3126
а должен бть +7 (961) 212-1527


 
Mach3   (2011-11-01 15:54) [31]

Т.Е. +7 (914) 717-3126
Код оператора неверен


 
sniknik ©   (2011-11-01 16:04) [32]

опять обманываешь... зачем тебе это?

> И даже так работает:
> http://ussuriisk.drom.ru/auto/?bull_id=6054110&request=ajax_show_contacts&crossdomain_ajax_request=2
вот проверяем, меняем id
http://ussuriisk.drom.ru/auto/?bull_id=6054111&request=ajax_show_contacts&crossdomain_ajax_request=2

и получаем вместо +7 (956) 717-3126 это +7 (986) 124-9629<br />+7 (986) 135-7123
т.е. все меняется, все ок, все РАБОТАЕТ

с чего ты взял что "должен бть" нам неведомо... и значит как аргумент не принимается.


 
Mach3   (2011-11-01 16:17) [33]

Может я чего не понимаю?!!!!!!!!
Посмотри на коды операторов: (956), (986).. таких, возможно даже не существует..
по объявлению http://ussuriisk.drom.ru/toyota/succeed/6035047.html номер должен быть +7 (924) 261-0278
выполняя  запрос http://ussuriisk.drom.ru/auto/?bull_id=6035047&request=ajax_show_contacts&crossdomain_ajax_request=2 получаем +7 (996) 261-0278
может у меня чего не так?!


 
Медвежонок Пятачок ©   (2011-11-01 16:23) [34]

видимо не хватает полей в заголовке гет запроса, а они анализируются сервером.


 
Медвежонок Пятачок ©   (2011-11-01 16:28) [35]

по крайней мере два потенциальных поля для этого я там вижу


 
Mach3   (2011-11-01 16:34) [36]

Поделитесь? я ничего не вижу =((((


 
Медвежонок Пятачок ©   (2011-11-01 16:36) [37]

ты в заголовки-то смотри в случае гета из браузера и гета аяксового.

> не суди.. и не судимым будешь..
не тупи и не тупым будешь


 
Mach3   (2011-11-01 16:36) [38]

(Request-Line):GET /auto/?_=1320154001505&bull_id=5800891&obj=show_contacts&crossdomain_ajax_request=2&re quest=ajax_show_contacts HTTP/1.1
User-Agent:Opera/9.80 (Windows NT 5.1; U; MRA 5.7 (build 03639); ru) Presto/2.9.168 Version/11.51
Host:ussuriisk.drom.ru
Accept-Language:ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding:gzip, deflate
Referer:http://ussuriisk.drom.ru/toyota/succeed/5800891.html
Cookie:PHPSESSID=6d4dc5cfeb76f2390bf7d3caad5c209b; cookie_cityid=4; cookie_regionid=25; DromCurrencyCookie=1; my_geo=25; __utma=175010237.909993659.1292484248.1320132495.1320151997.38; __utmb=175010237.8.10.1320151997; __utmc=175010237; __utmz=175010237.1320132495.37.3.utmcsr=delphimaster.ru|utmccn=(referral)|utmcmd =referral|utmcct=/cgi-bin/forum.pl
Connection:Keep-Alive
Content-Type:application/x-www-form-urlencoded
X-Requested-With:XMLHttpRequest
Accept:application/xml, text/xml, */*


(Request-Line):GET /auto/?_=1320154001505&bull_id=5800891&obj=show_contacts&crossdomain_ajax_request=2&re quest=ajax_show_contacts HTTP/1.1
Content-Type:text/html
Host:ussuriisk.drom.ru
Accept:text/html, */*
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)

Почти одно и тоже


 
Медвежонок Пятачок ©   (2011-11-01 16:38) [39]

Почти одно и тоже

так тебе почти одни и те же коды оперторов возвращаются в обоих случаях.
ну немного отличаются.
но не на порядок же.


 
Mach3   (2011-11-01 16:40) [40]

"Откуда пришли" указать?



Страницы: 1 2 вся ветка

Текущий архив: 2012.02.12;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.01 c
15-1319718265
И. Павел
2011-10-27 16:24
2012.02.12
Можно ли назначить триггер на чужую БД?


15-1319747403
Юрий
2011-10-28 00:30
2012.02.12
С днем рождения ! 28 октября 2011 пятница


3-1271682009
Виктор
2010-04-19 17:00
2012.02.12
Fast Reports 4.6


4-1254377124
Apachi
2009-10-01 10:05
2012.02.12
Узнать сколько места на диске занимает файл


15-1319229005
Юрий
2011-10-22 00:30
2012.02.12
С днем рождения ! 22 октября 2011 суббота