Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.005 c
1-1283530198
pushkin42
2010-09-03 20:09
2012.02.12
Зависание IDE при компиляции


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


15-1319683450
brother
2011-10-27 06:44
2012.02.12
что означает %5 в поле POST запроса?


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


2-1319873798
de_guta
2011-10-29 11:36
2012.02.12
Проблема с потоком





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский