Как проверить страницу на загрузку

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Добрый день. При работе с gsm-модемом периодически не догружается страница. Причем прокси чекается норм, а потом хрясь... Выглядит это по разному:
HTML:
<!--иногда так-->
<html>
    <head>
        <!--тут может что-то быть, а может и нет-->
    </head>
        
</html>

<!--иногда так-->
<html>
    <head>
<!--тут может что-то быть, а может и нет-->
    </head>
    <body>
        <!--тут пусто-->
    </body>
</html>
Соответственно с точки зрения зенки страница есть, а проверки типа tab.IsNull tab.IsVoid возвращают ложь. tab.IsBussy тоже не срабатывает, тк на странице имеется какой-никакой DOM. Сейчас проверку загрузки делаю костылем в цикле:
C#:
//проверяем, что форма прогрузилась поиском элемента form
var he = instance.ActiveTab.FindElementByXPath(@"//xpath", 0);

//даем догрузиться странице, выполниться всему js, и сгенерить страницу регистрации
for(int i=0; i<=10; i++)
{
    if((he.IsNull)||(he.IsVoid))
    {
        Thread.Sleep(5000);
    }
    else{project.SendInfoToLog("страница прогрузилась");}
}

if((he.IsNull)||(he.IsVoid))
    {
        throw new Exception("Не удалась загрузка страницы");
    }
Дальше по обстоятельствам — либо перезагрузка, либо BadEnd. И если перезагрузка — это дополнительные кубики, чтобы не уйти в бесконечный цикл, костыли значительно усложняют шаблон, его читабельность и структуру.
Может быть кто подскажет более изящное решение? Спасибо.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
  • Спасибо
Реакции: Valandersi

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
я просто жду контрольный элемент секунд 20, потом раза 3 пытаюсь перезагрузить страницу. все в одном цикле. процедуру вынес в общий код.
 
  • Спасибо
Реакции: semafor и Yuriy Zymlex

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Соответственно с точки зрения зенки страница есть, а проверки типа tab.IsNull tab.IsVoid возвращают ложь. tab.IsBussy тоже не срабатывает, тк на странице имеется какой-никакой DOM. Сейчас проверку загрузки делаю костылем в цикле:
а почему сразу костыль ? это нормальная работа в неопределенной среде. контроль нужного элемента крайне важен , учитывая нестабильность работы каналов связи. да что там каналы, у меня сайт на котором шаблоны работают периодически ложиться отдыхать.

надо эту операцию переход на сайт оформить один раз в общем коде грамотно, с проверками и забыть про эту кучу кода. в кубике вызывать одной строкой. ну еще пару строк на формирование входных настроек.
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
А
я просто жду контрольный элемент секунд 20, потом раза 3 пытаюсь перезагрузить страницу. все в одном цикле. процедуру вынес в общий код.
Ага, если в общий код выносить — это вариант. Спасибо
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
ну это вы зря. у вас цикл ожидания как раз лимитирован по попыткам с паузой.
Да свой то код я понимаю, именно для того цикл и заводил, чтобы шаб тут не встретился с вечностью, и в то же время не успокоился после разовой проверки. Просто думал может есть методы, которые решают этот вопрос проще, после ответа Zymlex-а прлез таймеры смотреть, но с разбегу не понял как упростить свой код...
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Да свой то код я понимаю, именно для того цикл и заводил, чтобы шаб тут не встретился с вечностью. Просто думал может есть методы, которые решают этот вопрос проще...
надо не проще , а надежнее , пусть кода будет больше , но зато результат однозначные. кучу кода просто сворачивать в процедуры надо.
да и еще совет. надо проверять вкладку на ноль и пустоту ( instance.ActiveTab.IsNull instance.ActiveTab.IsVoid ) и делать исключение в этом случае. и в кубике где будете вызывать свою процедуру красный выход не занимайте. проверку результатов лучше сделать в следующем кубике.
примерно так
47111

это очень важно, когда инстанс упадет шаблон должен выйти наружу по Bad End , а если красная ветка будет занята под логику, возможно зависание шаблонов в памяти, что приводит к краху зенки или системы в целом.
 
  • Спасибо
Реакции: semafor

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Мысль о контроле не по одному, а по нескольким элементам реализовывал на целевых страницах, в примере выше рефер с которого выполняется переход. Вкладку проверяю в предыдущем кубике. А за проверку результатов в отдельном кубике спасибо, буду осмысливать.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
а, да забыл написать что проверку вкладки надо делать на только в начале работы с вкладкой , но и после каждого обращения к элементу.
так как инстанс может упасть в любой момент и обращение к элементам приводит к зависонам а тем более цикл... может очень надолго зависнуть.
 
  • Спасибо
Реакции: Yuriy Zymlex и semafor

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
надо не проще , а надежнее , пусть кода будет больше , но зато результат однозначные. кучу кода просто сворачивать в процедуры надо.
да и еще совет. надо проверять вкладку на ноль и пустоту ( instance.ActiveTab.IsNull instance.ActiveTab.IsVoid ) и делать исключение в этом случае. и в кубике где будете вызывать свою процедуру красный выход не занимайте. проверку результатов лучше сделать в следующем кубике.
примерно так
Посмотреть вложение 47111

это очень важно, когда инстанс упадет шаблон должен выйти наружу по Bad End , а если красная ветка будет занята под логику, возможно зависание шаблонов в памяти, что приводит к краху зенки или системы в целом.
Пожалуйста, поделись этими тремя кубиками.
Нет такого сниппета чтобы он в режиме реально времени контролировал вкладки, при выполнение шаблона?
 

Zoloo

Client
Регистрация
19.06.2020
Сообщения
123
Благодарностей
10
Баллы
18
Пожалуйста, поделись этими тремя кубиками.
Нет такого сниппета чтобы он в режиме реально времени контролировал вкладки, при выполнение шаблона?
тоже хотелось бы получить
 

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