Умная пауза или как задержать выполнение проекта?

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
всем привет!

Такая вот дилемма: например на странице есть JS и много флеша. При использовании стандартного кубика "пауза" или C# кода System.Threading.Thread.Sleep(10 * 1000); получаю паузу 10с, но все процессы на странице замирают. Например видеоплеер остановит воспроизведение и т.д.

Существуют ли еще способы отсрочить закрытие окна(инстанса) в ZP, некий другой способ паузы либо как вариант мне подойдет проверка активности сети, т.е. перестал ли инстанс слать аяксы и вообще что-то отправлять или получать.

всем заранее спасибо за ответ.
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
надо вот такое в кубик си кода засунуть
C#:
instance.WaitForUserAction(300);
300 - это пауза в миллисекундах, можно больше ставить, кубик завершится если всплывшее окно закроете

этот метод в последних версиях был добавлен, не помню уже в какой
 
  • Спасибо
Реакции: Sergodjan

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
300 - это пауза в миллисекундах, можно больше ставить
Ну, это не умная, это тупая. Костыль, в общем-то.
Если ты силён в C# чуть более умное решение,- ставишь простой цикл, и выход, после определённого действия, например, при нажатии на какое-то место на странице (ибо пауза нужна, в общем-то в браузерном варианте)
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
А разве ожидание загрузки страницы не спасет в данном случае?
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
 
  • Спасибо
Реакции: Rain

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
надо вот такое в кубик си кода засунуть
C#:
instance.WaitForUserAction(300);
300 - это пауза в миллисекундах, можно больше ставить, кубик завершится если всплывшее окно закроете

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

Дальше буду копать как определить активность в табе, продолжаются ли сетевые соединения и т.д.
 

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
Ну, это не умная, это тупая. Костыль, в общем-то.
Если ты силён в C# чуть более умное решение,- ставишь простой цикл, и выход, после определённого действия, например, при нажатии на какое-то место на странице (ибо пауза нужна, в общем-то в браузерном варианте)
Костыль, но сработал. Цикл, выход после действия нажатия? Не вариант.

А разве ожидание загрузки страницы не спасет в данном случае?
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
в том то и дело, что нет. Страница загружается полностью, а уже после происходит активность в Flash или JavaScript, вот мне нужно подождать пока эти активности закончатся.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
в том то и дело, что нет. Страница загружается полностью, а уже после происходит активность в Flash или JavaScript, вот мне нужно подождать пока эти активности закончатся.
А если попробовать поиграться с этими чекбоксами?

Screenshot_7.png
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Страница загружается полностью, а уже после происходит активность в Flash или JavaScript, вот мне нужно подождать пока эти активности закончатся
Это надо писать в самом начале. А то мы тут гаданием занимаемся, "чего ему нада"? :am:
 

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
А если попробовать поиграться с этими чекбоксами?

Посмотреть вложение 21068
ну это аналог:
instance.IgnoreAjaxRequests = true;
instance.IgnoreAdditionalRequests = false;
instance.IgnoreFrameRequests = false;
instance.IgnoreFlashRequests = true;

т.е. просто включение или отключение игнорирование Ajax и прочих зпросов, а я как раз хочу дождаться, пока они все выполнятся, а инстанс закрывается раньше, почему не понимаю. В принципе вариантом instance.WaitForUserAction(10); принудительно жду 10с, пока хоть так :-)

Это надо писать в самом начале. А то мы тут гаданием занимаемся, "чего ему нада"? :am:
дык вот же - "System.Threading.Thread.Sleep(10 * 1000); получаю паузу 10с, но все процессы на странице замирают. Например видеоплеер остановит воспроизведение и т.д."
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
Ну так дожидайся так
C#:
instance.IgnoreAdditionalRequests = false;
instance.IgnoreAjaxRequests = false;
instance.IgnoreFlashRequests = false;
instance.IgnoreFrameRequests = false;
дык точно такой код у меня в самом начале проекта, так как например без instance.IgnoreFlashRequests = false; в флеше не загружался контент. Но фишка в том, что видимо происходит какая-то пауза внутри флеша между запросами, а инстанс закрывается, когда доходит до последнего кубика.

как вариант пробую сейчас (эксперементирую) делать так:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
потом пауза и снова проверка if (tab.IsBusy)
так в цикле несколько раз. что бы словить последующие запросы флеша и уже если через например 10 циклов tab.IsBusy=false тогда уж переход дальше по цепочке кубиков и закрытие инстанса.

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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Тогда привяжись к какому-нибудь постоянному элементу (найди элемент), который появляется только после выполнения всех скриптов, и ожидай его появление на странице кодом
C#:
int count = 60; // максимальное количество выполнений цикла (в данном случае, грубо говоря, максимальная пауза в сек)
for (int i = 0; i < count; i++) {
    HtmlElement he = instance.ActiveTab.FindElementByAttribute("Атрибуты");
    if (!he.IsVoid) break;
    Thread.Sleep(1000);
}
 
  • Спасибо
Реакции: sahha

Sevenup

Client
Регистрация
29.04.2017
Сообщения
46
Благодарностей
2
Баллы
8
Тогда привяжись к какому-нибудь постоянному элементу (найди элемент), который появляется только после выполнения всех скриптов, и ожидай его появление на странице кодом
C#:
int count = 60; // максимальное количество выполнений цикла (в данном случае, грубо говоря, максимальная пауза в сек)
for (int i = 0; i < count; i++) {
    HtmlElement he = instance.ActiveTab.FindElementByAttribute("Атрибуты");
    if (!he.IsVoid) break;
    Thread.Sleep(1000);
}
Вам спасибо за подсказки с готовыми примерами! В флеше невозможно отследить активность элементов, остановился пока на статичной паузе из примера выше, а также продолжаю бороться с багами зенки (описываю их в соседней ветке) :(
 
Регистрация
28.11.2020
Сообщения
57
Благодарностей
5
Баллы
8
Как вместо 300 поставить рандомное время в диапазоне?
надо вот такое в кубик си кода засунуть
C#:
instance.WaitForUserAction(300);
300 - это пауза в миллисекундах, можно больше ставить, кубик завершится если всплывшее окно закроете

этот метод в последних версиях был добавлен, не помню уже в какой
 

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 633
Благодарностей
1 229
Баллы
113
Как вместо 300 поставить рандомное время в диапазоне?
Думаю, как-то так:

C#:
Random random = new Random();
int min = 100;
int max = 301;
int randomPause = random.Next(min, max);
       
instance.WaitForUserAction(randomPause);
Или так:
C#:
Random random = new Random();
int randomPause = random.Next(100, 301);
return randomPause;

Если надо, вместо 100 и 301 вставляем переменные. Ну и помним, что для верхнего предела всегда последнее число выпадает, поэтому надо "с запасом"...
 
Последнее редактирование:
  • Спасибо
Реакции: Биржевик
Регистрация
28.11.2020
Сообщения
57
Благодарностей
5
Баллы
8
А разве ожидание загрузки страницы не спасет в данном случае?
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
Это всегда 100% дает дождаться загрузку страницы, или бывает, что какой то блок не успевает догрузиться?
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)