Главная страница
    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]

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


 
sniknik ©   (2011-11-01 16:40) [41]

всего там хватает...
тот же самый запрос со страницы при нажатии кнопки получает именно +7 (996) 261-0278 (по данным фаребага) но отображает +7 (924) 261-0278

защита? ;)


 
sniknik ©   (2011-11-01 16:44) [42]

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


 
sniknik ©   (2011-11-01 16:46) [43]

а понял, в куках регион есть, первые цифры наверное от него зависят.


 
Омлет ©   (2011-11-01 16:48) [44]

Там, действительно, есть какая-то защита.
И на некоторых страницах капча..

Возможно, хидер как-то влияет на резульата.
Это, к примеру, запрашивает ajax:
(Request-Line) GET /auto/?_=1320169503840&bull_id=6035047&obj=show_contacts&crossdomain_ajax_request=2&re quest=ajax_show_contacts HTTP/1.1
Host ussuriisk.drom.ru
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept application/xml, text/xml, */*
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Connection keep-alive
Content-Type application/x-www-form-urlencoded
X-Requested-With XMLHttpRequest
Referer http://ussuriisk.drom.ru/toyota/succeed/6035047.html
Cookie cookie_cityid=9; cookie_regionid=66; DromCurrencyCookie=1; my_geo=66; PHPSESSID=c7c79f267c9ea95e5d356e1a7ca84915


А это из адресной строки вызов:
(Request-Line) GET /auto/?_=1320169503840&bull_id=6035047&obj=show_contacts&crossdomain_ajax_request=2&re quest=ajax_show_contacts HTTP/1.1
Host ussuriisk.drom.ru
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
Connection keep-alive
Cookie cookie_cityid=9; cookie_regionid=66; DromCurrencyCookie=1; my_geo=66; PHPSESSID=c7c79f267c9ea95e5d356e1a7ca84915


Но, подозреваю, что именно по первому параметру ("_"), распознается робот и отдается неверный код оператора. Я сходу не вижу, откуда достается этот параметр.


 
Mach3   (2011-11-01 16:49) [45]

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


 
Mach3   (2011-11-01 16:50) [46]


> Но, подозреваю, что именно по первому параметру ("_")

Тоже так думаю..


 
Mach3   (2011-11-01 17:03) [47]

Если есть еще идеи- буду рад читать..
Решение с TWebBrowser нашел, но хотелось бы сэмулировать запрос.


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

какое еще-то решение?

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


 
Mach3   (2011-11-01 17:23) [49]

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


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

Оказалось, что параметр "_" реально не нужен, он, наверное, только для защиты от кэширования.

Обязательно должны быть два поля в заголовке:

X-Requested-With XMLHttpRequest
Referer   http://ussuriisk.drom.ru/toyota/succeed/6054110.html


Тогда возвращает верный номер и не требует капчу. Проверял с помощью плагина HttpRequester к фаерфоксу.


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

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


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

Странную, однако, "защиту" придумал камрад Кирилл Ковальчук..
А найдя эту ветку по логам с сервера, он "защиту" сделает ещё странней ))


 
Mach3   (2011-11-03 06:24) [53]

=))))))))))))))
Всем спасибо..



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

Форум: "Начинающим";
Текущий архив: 2012.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.005 c
2-1320340245
vsafary
2011-11-03 20:10
2012.02.12
Память и динамические массивы


2-1320226118
igorium
2011-11-02 12:28
2012.02.12
Как встроить свой шрифт в программу?


6-1250528504
sniknik
2009-08-17 21:01
2012.02.12
Генерация файлов для получения сертификата (SSL)


2-1320124854
Mach3
2011-11-01 08:20
2012.02.12
Дождаться выполнения скрипта.


15-1319117051
OW
2011-10-20 17:24
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский