Главная страница
    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.006 c
3-1271148522
Rusland
2010-04-13 12:48
2012.02.12
FibPlus в клиент-серверном приложении


15-1316061929
P
2011-09-15 08:45
2012.02.12
Windows 8 Developer Preview


2-1318507172
Nucer
2011-10-13 15:59
2012.02.12
Самый быстрый способ считать маленький файл в строку


2-1320472669
defen2204
2011-11-05 08:57
2012.02.12
представление файла в байтовом виде


15-1319187613
George
2011-10-21 13:00
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский