Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Webbrowser и загрузка страниц 
V
    Опции темы
progbeg
Дата 13.7.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Здравствуйте!
      Проблема такова: в webbrowser загружается страница. Загрузилась она или нет, отслеживается через
Код

while webbrowser1.readystate<>readystate_complete
   application.processmessages;

После загрузки я забиваю в переменную список всех элементов
Код

Webbrowser1.OleObject.Document.forms.item(0).elements

После этого произвожу необходимые мне действия на странице, "нажимаю" кнопку и загружается следующая страница, где мне необходимо произвести те же самые действия (список-действия-нажатие кнопки).
Так вот, во второй раз список не загружается, он остаётся тем же самым. То есть как будто мы остались на той же самой странице, а не перешли на другую.
В чём тут проблема? 
PM MAIL   Вверх
progbeg
Дата 15.7.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Может быть, не совсем понятна проблема? А то даже идей никто никаких не подаёт  smile . Вот такой код у меня:
Код

WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
         load(Webbrowser1,StatusBar1); // это пока страница загрузится и вывод сообщений в строку состояния
         ovElements:=Webbrowser1.OleObject.Document.forms.item(0).elements;
         for i := 0 to (ovElements.Length - 1) do
             begin
              if (ovElements.item(i).tagName = 'xxx') and
               (ovElements.item(i).type = 'input') and
               (ovElements.item(i).id = 'xxx') then
                ovElements.item(i).Checked:=true;
              if (ovElements.item(i).tagName = 'submit') and
               (ovElements.item(i).type = 'xxx') and
               (ovElements.item(i).Value = 'xxx') then
                ovElements.item(i).Click;
             end;
         load(Webbrowser1,StatusBar1);

после этого мне нужно делать то же самое. То есть снова список, потом необходимые действия. Только вот получается, что Webbrowser1.OleObject.Document.forms.item(0).elements; - и там и там в таком виде. И webbrowser все действия производит на той же странице и только потом загружает следующую, но там ничего не происходит. 
PM MAIL   Вверх
progbeg
Дата 15.7.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Столько умных человеков на форуме и никто не может ничего предложить? smile 
Я уже бьюсь с этой проблемой три дня.  smile
Неужели никто с такой ситуацией не сталкивался? 
Проблема, возможно, связана с тем, что переход на другую страницу - через метод Click - кнопки (там нет ссылки, там скрипт выполняется). То есть нет конкретного url. Если так, то как это исправить/обойти? 

Это сообщение отредактировал(а) progbeg - 15.7.2006, 17:51
PM MAIL   Вверх
Girder
Дата 15.7.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 6
Всего: 155



ii:=Variant(Webbrowser1.Document).all
...
ii.length;
...
ii.item(j).tagName
...
if Variant(i).item(j).tagName='A' then if Variant(i).item(j).Click
... 


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
progbeg
Дата 15.7.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Бр-ррр, что-то совсем путаница какая-то... А можно мой код применительно к этому показать? smile   smile Не понимаю! Не получается, или может быть я не там вписываю. Как надо сделать?? 

Это сообщение отредактировал(а) progbeg - 15.7.2006, 20:32
PM MAIL   Вверх
December
Дата 16.7.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



progbeg, 
1) попробуй просто вставить задержку на 10 секунд посде сабмита
если это решит проблему, то попробуй использовать примерно такю процедуру таймаута:
Код

procedure WaitFor(gWB:TWebBrowser);
var
  Started:cardinal;

  function Satisfied:boolean;
  begin
  result:=(GetTickCount-Started)>WaitForTimeout;
  result:=result or (gWB.ReadyState=READYSTATE_COMPLETE);
  end;//Satisfied

begin
Started:=GetTickCount;
while not Satisfied do Wait(100);
end;//WaitFor


procedure Wait(milliseconds:cardinal);
var
 wint1:cardinal;
 wint2:cardinal;
begin
wint1:=GetTickCount;
wint2:=wint1+milliseconds;
repeat
sleep(1);
application.ProcessMessages;
sleep(1);
until (wint2)<GetTickCount;
end;


2) можно попробовать через IHTML* интерфейсы переделать...
 


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
crazydel
Дата 16.7.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Все довольно таки просто.. просто надо немного помучаться и разобраться :-)
В процедуре ожидания load надо дописать ожидание, пока браузер перестанет быть занятым:

Код

procedure load(wb:Twebbrowser; sb:TStatusBar);
begin
   while (Wb.ReadyState<>READYSTATE_COMPLETE) do
             begin
               Application.ProcessMessages;
               Sb.SimpleText:='бла-бла...';
             end;
   Application.HandleMessage;

   while wb.Busy do
    begin
     Application.ProcessMessages;
    end;
   Sb.SimpleText:='бла-бла....';
end;
 smile   
PM MAIL   Вверх
progbeg
Дата 16.7.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Всем спасибо! crazydel +1 smile)))  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.