Ожидание загрузки инстанта

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
юзаю этот шарп
C#:
Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
крайне редко, но МЕТКО бывает так что инстант заглючивает и грузится очень долго или тупо лагает, хз в общем что происходит с ним.

вопрос, как апгрейтить шарп, чтоб он ждал загрузки, но если это ожидание больше 60 секунд, то сбрасывал и переходил к следующему действию?
спасибо
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

wmajiug3e

Client
Регистрация
29.11.2019
Сообщения
64
Благодарностей
16
Баллы
8
Хром используешь? Он почему-то не ждет полной загрузки, я переключил на Firefox и он ждет окончания загрузки страницы как нужно
 

Velevlad

Client
Регистрация
17.12.2019
Сообщения
17
Благодарностей
6
Баллы
3
Я для пробы сделал такой код. Он не уходит в глухое ожидание, а ждёт в цикле, хотя по сути делает ровно тоже самое.
C#:
Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
var iStartTime = DateTimeOffset.Now.ToUnixTimeSeconds();
tab.Navigate(@"https://yandex.ru/", referrer:"");
// Ожидание загрузки страницы
while ( tab.IsBusy ) {
    System.Threading.Thread.Sleep(1000);  // пауза 1 секунда
}
// if (tab.IsBusy) tab.WaitDownloading(); // ожидаем загрузку страницы
var iEndTime = DateTimeOffset.Now.ToUnixTimeSeconds();

project.SendInfoToLog("", "Страница загружена за "+ (iEndTime-iStartTime)+" сек", true);
Если его немного изменить и сделать цикл лимитированным
C#:
int iWaitTimeMax = 60; // Ждать максимум 60 секунд - можно вынести в переменные проекта и брать оттуда
int iCounter = 0;
while ( tab.IsBusy && iCounter < iWaitTimeMax ) {
    System.Threading.Thread.Sleep(1000);  // пауза 1 секунда
    iCounter++;
}
var iEndTime = DateTimeOffset.Now.ToUnixTimeSeconds();
if ( tab.IsBusy ) {
    project.SendInfoToLog("", "Странице не удалось загрузиться за "+ (iEndTime-iStartTime)+" сек", true);
    return false;
}
Код примерный, в деле ещё не пробовал, но на первый взгляд должен работать. Если гуру меня поправят, буду только рад.
 
  • Спасибо
Реакции: backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
то есть полный снипет с лимитом будет таким?

C#:
Tab tab = instance.ActiveTab;
if ((tab.IsVoid) || (tab.IsNull)) return -1;
if (tab.IsBusy) tab.WaitDownloading();
var iStartTime = DateTimeOffset.Now.ToUnixTimeSeconds();
tab.Navigate(@"https://yandex.ru/", referrer:"");
int iWaitTimeMax = 60; // Ждать максимум 60 секунд - можно вынести в переменные проекта и брать оттуда
int iCounter = 0;
while ( tab.IsBusy && iCounter < iWaitTimeMax ) {
    System.Threading.Thread.Sleep(1000);  // пауза 1 секунда
    iCounter++;
}
var iEndTime = DateTimeOffset.Now.ToUnixTimeSeconds();
if ( tab.IsBusy ) {
    project.SendInfoToLog("", "Странице не удалось загрузиться за "+ (iEndTime-iStartTime)+" сек", true);
    return false;
}
 
  • Спасибо
Реакции: usbiz

Velevlad

Client
Регистрация
17.12.2019
Сообщения
17
Благодарностей
6
Баллы
3
Всё верно. Но в деле я сам ещё не пробовал, надо тестировать.
Ну и мои вычисления времени загрузки тоже можно выкинуть.
 

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