Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2012, 23:19   #1
sarmat84
 
Регистрация: 13.08.2012
Сообщений: 7
По умолчанию Компонент TWebBrowser

На форме есть компонент TWebBrowser. В него загружается aspx страница.После загрузки страницы и нажатии кнопки на странице начинает выполняться javascript код. Вопрос: как программно определить что скрипт закончил выполнение?
sarmat84 вне форума Ответить с цитированием
Старый 24.08.2012, 01:38   #2
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

Цитата:
как программно определить что скрипт закончил выполнение
Встречный вопрос. На время забудем что Тут Delphi и Webbrowser

как ВЫ можете только ресурсами JavaScript страницы определить закончилось то событие или нет?

Если ВЫ не знаете как опеределить или не можете "изменить" исходный код этой страницы то эта задача не имеет решения в принципе.

То есть другими словами задача сводится к тому чтобы JavaScript вывел сообщение через alert("Событие завершено");

После этого уже все довольно просто.
Lesha вне форума Ответить с цитированием
Старый 29.08.2012, 16:56   #3
sarmat84
 
Регистрация: 13.08.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Lesha Посмотреть сообщение
То есть другими словами задача сводится к тому чтобы JavaScript вывел сообщение через alert("Событие завершено");
Как это сделать?В Делфи
sarmat84 вне форума Ответить с цитированием
Старый 29.08.2012, 17:02   #4
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

задача не понятна. Код, ссылку, сайт в студию!
Lesha вне форума Ответить с цитированием
Старый 29.08.2012, 17:03   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

А что делает скрипт?
eval вне форума Ответить с цитированием
Старый 29.08.2012, 22:07   #6
sarmat84
 
Регистрация: 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?Но как тогда выполнять скрипт?
sarmat84 вне форума Ответить с цитированием
Старый 29.08.2012, 22:32   #7
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

используйте модуль jsWebbrowser для упрощения запуска JS и работы с DOM

Работать надо с таймером.

Таймер проверяет элемент с классом dxpCurrentPageNumber_DevEx

(можно использовать Jquery для парсинга значения)

если страница поменялась => загрузка завершена и можно "парсить"

Последний раз редактировалось Lesha; 29.08.2012 в 22:34.
Lesha вне форума Ответить с цитированием
Старый 29.08.2012, 22:59   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Вот проблема!!!Как решить не знаю. Может совсем отказаться от TWebBrowser?Но как тогда выполнять скрипт?
Ненадо никаких скриптов и браузеров и таймеров, надо просто отправлять правильные запросы и обрабатывать ответы. Хоть темже инди.
eval вне форума Ответить с цитированием
Старый 31.08.2012, 20:44   #9
sarmat84
 
Регистрация: 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
sarmat84 вне форума Ответить с цитированием
Старый 31.08.2012, 21:01   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Запрос уходит?
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компонент, наподобие 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