|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.08.2012, 23:19 | #1 |
Регистрация: 13.08.2012
Сообщений: 7
|
Компонент TWebBrowser
На форме есть компонент TWebBrowser. В него загружается aspx страница.После загрузки страницы и нажатии кнопки на странице начинает выполняться javascript код. Вопрос: как программно определить что скрипт закончил выполнение?
|
24.08.2012, 01:38 | #2 | |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
Цитата:
как ВЫ можете только ресурсами JavaScript страницы определить закончилось то событие или нет? Если ВЫ не знаете как опеределить или не можете "изменить" исходный код этой страницы то эта задача не имеет решения в принципе. То есть другими словами задача сводится к тому чтобы JavaScript вывел сообщение через alert("Событие завершено"); После этого уже все довольно просто. |
|
29.08.2012, 16:56 | #3 |
Регистрация: 13.08.2012
Сообщений: 7
|
|
29.08.2012, 17:02 | #4 |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
задача не понятна. Код, ссылку, сайт в студию!
|
29.08.2012, 17:03 | #5 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
А что делает скрипт?
|
29.08.2012, 22:07 | #6 |
Регистрация: 13.08.2012
Сообщений: 7
|
В TWebBrowser отображается страничка http://gzakupki.ru/guide/supplier.aspx. Далее я выполняю следующий код:
WebBrowser1.OleObject.Document.getE lementById('ctl00_ContentHolder_txt OrganizationName_Raw').Value:=INN; WebBrowser1.OleObject.Document.getE lementById('ctl00_ContentHolder_btn Refresh').Click; где INN - символы для поиска. В TWebBrowser отображаются результаты поиска (до 30000 страниц, в зависимости от введённых данных). Чтобы обойти все страницы я запускаю цикл в котором последовательно перезагружаю страницу for i:=0 to EndPage do begin Webbrowser1.Document.QueryInterface (IHTMLDocument2, iDoc1); s:='aspxGVPagerOnClick("ctl00_Conte ntHolder_grdSupplier","PBN")'; ExecuteScript(iDoc1,s,'JavaScript') ; end; функция ExecuteScript(iDoc1,s,'JavaScript') ; просто выполняет JavaScript. Новые данные не успеваю загружаться и прога не работает.Данные на странице не обновляются. Я попробовал впихнуть это в таймер, чтобы скрипт запускался через определённое время.Но примерно через 200-250 страниц прога начинает сильно тормозить, проц загружен на 100% и вешает систему. Вот проблема!!!Как решить не знаю. Может совсем отказаться от TWebBrowser?Но как тогда выполнять скрипт? |
29.08.2012, 22:32 | #7 |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
используйте модуль jsWebbrowser для упрощения запуска JS и работы с DOM
Работать надо с таймером. Таймер проверяет элемент с классом dxpCurrentPageNumber_DevEx (можно использовать Jquery для парсинга значения) если страница поменялась => загрузка завершена и можно "парсить" Последний раз редактировалось Lesha; 29.08.2012 в 22:34. |
29.08.2012, 22:59 | #8 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
|
|
31.08.2012, 20:44 | #9 |
Регистрация: 13.08.2012
Сообщений: 7
|
Я составил запрос со следующими параметрами:
data1:= TIdMultiPartFormDataStream.Create; data1.AddFormField('__EVENTTARGET', ''); data1.AddFormField('__EVENTARGUMENT ', ''); data1.AddFormField('__VIEWSTATE', ViewState); data1.AddFormField('ctl00_Navigatio n_NavigationBarGS', '0;0;0;0;0;0;1;0;0;0;0;0;0;0;0'); data1.AddFormField('ctl00$Login$txt Login', ''); data1.AddFormField('ctl00$Login$txt Password', ''); data1.AddFormField('search', ''); data1.AddFormField('DXScript', '1_42,1_75,1_60,2_34,2_41,2_27,1_52 ,1_66,3_7,2_30,1_41'); data1.AddFormField('ctl00_ContentHo lder_txtOrganizationName_Raw', Simvol); data1.AddFormField('ctl00$ContentHo lder$txtOrganizationName', Simvol); data1.AddFormField('ctl00$ContentHo lder$chkConform', 'I'); data1.AddFormField('ctl00$ContentHo lder$grdSupplier$DXSelInput',''); data1.AddFormField('ctl00$ContentHo lder$grdSupplier$DXSelInput', '[]'); data1.AddFormField('ctl00$ContentHo lder$grdSupplier$CallbackState', CallbackState); data1.AddFormField('DXScript', '1_42,1_75,1_60,2_34,2_41,2_27,1_52 ,1_66,3_7,2_30,1_41'); data1.AddFormField('__CALLBACKID', 'ctl00$ContentHolder$grdSupplier'); data1.AddFormField('__CALLBACKPARAM ', 'c0:KV|2;[];GB|20;12|PAGERONCLICK3|PBN;'); data1.AddFormField('__EVENTVALIDATI ON', Validation); Page := Utf8ToAnsi(IdHTTP1.Post('http://gzakupki.ru/guide/supplier.aspx', data1)); Но отладчик выдаёт ошибку: Invalid argument to date encode |
31.08.2012, 21:01 | #10 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Запрос уходит?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компонент, наподобие TWebBrowser | Pasha_Sh | Компоненты Delphi | 3 | 01.07.2012 22:51 |
Компонент TWebBrowser в Delphi и работа с ресурами | bibika | Помощь студентам | 8 | 13.12.2011 12:47 |
Компонент-аналог TWebBrowser | kettanaito | Компоненты Delphi | 9 | 09.11.2011 23:44 |
Где скачать компонент TWebBrowser? | Rock'n'rolla | Компоненты Delphi | 4 | 26.01.2010 13:23 |
Автоматическая авторизация если присуствует компонент TWebBrowser | eldar | Работа с сетью в Delphi | 8 | 28.09.2008 22:04 |