Форум: "Начинающим";
Текущий архив: 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