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

  • Автор темы Автор темы semafor
  • Дата начала Дата начала

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Реакции
410
Баллы
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. И если перезагрузка — это дополнительные кубики, чтобы не уйти в бесконечный цикл, костыли значительно усложняют шаблон, его читабельность и структуру.
Может быть кто подскажет более изящное решение? Спасибо.
 
я просто жду контрольный элемент секунд 20, потом раза 3 пытаюсь перезагрузить страницу. все в одном цикле. процедуру вынес в общий код.
 
  • Спасибо
Реакции: semafor и ZX
Соответственно с точки зрения зенки страница есть, а проверки типа tab.IsNull tab.IsVoid возвращают ложь. tab.IsBussy тоже не срабатывает, тк на странице имеется какой-никакой DOM. Сейчас проверку загрузки делаю костылем в цикле:

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

надо эту операцию переход на сайт оформить один раз в общем коде грамотно, с проверками и забыть про эту кучу кода. в кубике вызывать одной строкой. ну еще пару строк на формирование входных настроек.
 
А
я просто жду контрольный элемент секунд 20, потом раза 3 пытаюсь перезагрузить страницу. все в одном цикле. процедуру вынес в общий код.
Ага, если в общий код выносить — это вариант. Спасибо
 
ну это вы зря. у вас цикл ожидания как раз лимитирован по попыткам с паузой.
Да свой то код я понимаю, именно для того цикл и заводил, чтобы шаб тут не встретился с вечностью, и в то же время не успокоился после разовой проверки. Просто думал может есть методы, которые решают этот вопрос проще, после ответа Zymlex-а прлез таймеры смотреть, но с разбегу не понял как упростить свой код...
 
Да свой то код я понимаю, именно для того цикл и заводил, чтобы шаб тут не встретился с вечностью. Просто думал может есть методы, которые решают этот вопрос проще...

надо не проще , а надежнее , пусть кода будет больше , но зато результат однозначные. кучу кода просто сворачивать в процедуры надо.
да и еще совет. надо проверять вкладку на ноль и пустоту ( instance.ActiveTab.IsNull instance.ActiveTab.IsVoid ) и делать исключение в этом случае. и в кубике где будете вызывать свою процедуру красный выход не занимайте. проверку результатов лучше сделать в следующем кубике.
примерно так
47111

это очень важно, когда инстанс упадет шаблон должен выйти наружу по Bad End , а если красная ветка будет занята под логику, возможно зависание шаблонов в памяти, что приводит к краху зенки или системы в целом.
 
  • Спасибо
Реакции: semafor
Мысль о контроле не по одному, а по нескольким элементам реализовывал на целевых страницах, в примере выше рефер с которого выполняется переход. Вкладку проверяю в предыдущем кубике. А за проверку результатов в отдельном кубике спасибо, буду осмысливать.
 
а, да забыл написать что проверку вкладки надо делать на только в начале работы с вкладкой , но и после каждого обращения к элементу.
так как инстанс может упасть в любой момент и обращение к элементам приводит к зависонам а тем более цикл... может очень надолго зависнуть.
 
  • Спасибо
Реакции: ZX и semafor
надо не проще , а надежнее , пусть кода будет больше , но зато результат однозначные. кучу кода просто сворачивать в процедуры надо.
да и еще совет. надо проверять вкладку на ноль и пустоту ( instance.ActiveTab.IsNull instance.ActiveTab.IsVoid ) и делать исключение в этом случае. и в кубике где будете вызывать свою процедуру красный выход не занимайте. проверку результатов лучше сделать в следующем кубике.
примерно так
Посмотреть вложение 47111

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

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