Ожидание окончательной загрузки элементов на странице в DOM

prostors

Client
Регистрация
16.12.2020
Сообщения
1 456
Реакции
79
Баллы
48
Я заметил, что часть элементов загружается в DOM после того, как действие "Переход на страницу" выходит по зелёному

встречается раз в несколько часов

как дождаться полной загрузки страницы в DOM? включая все js
 
Если вы просто хотите дождаться полной загрузки страницы в браузере, вы можете использовать следующий код

JavaScript:
Развернуть Свернуть Копировать
window.onload = function() {
    //какие-то действия
};
В кубике можно выбрать как выполнять , при загрузке странице, при создание окна и т.д
 
  • Спасибо
Реакции: prostors
Если вы просто хотите дождаться полной загрузки страницы в браузере, вы можете использовать следующий код

JavaScript:
Развернуть Свернуть Копировать
window.onload = function() {
    //какие-то действия
};
В кубике можно выбрать как выполнять , при загрузке странице, при создание окна и т.д
Я про действия zenno писал
 
Я про действия zenno писал
Создаете кубик javascript в проекте, он будет ждать пока страница полностью не загрузиться. То есть Переход на страницу-кубик js - ваш остальной код
 
Главное не забудьте установить "при загрузке странице" - "все время" или выберите другие настройки в кубике какие вам надо. В верху в кубике увидите
 
  • Спасибо
Реакции: prostors
Главное не забудьте установить "при загрузке странице" - "все время" или выберите другие настройки в кубике какие вам надо. В верху в кубике увидите
129838 вот так выходит по красному без комментариев в логе
 
Надо положить результат в переменную, ниже в кубике
 
  • Спасибо
Реакции: prostors
Этот кубик javasript срабатывает, когда весь контент страницы (включая HTML, CSS, изображения и другие ресурсы) полностью загружен. Это означает, что все элементы на странице доступны для взаимодействия. То есть сначала вы делаете переход на страницу, потом выполняется этот кубик и он проверят что все элементы загружены, когда это праизайдет, он выйдет по зеленой ветке
 
Ajax запросы все еще существуют и их активно используют веб разработчики... Как и вебсокеты...

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

Если в зенке не отключать ожидание ajax то она некоторые сайты будет ждать примерно... До бесконечности :)

Зная Константина, из действий постера, тут только решение это включить все ожидания активностей + кубик поиска контрольного элемента, который появится после всех загрузок... Работать будет криво, зависать по 100500 минут на каждом действии... Зато все как хочется... Так сказать из коробки на стандартных действиях ;)
 
  • Спасибо
Реакции: usawa0
Можно дергать с монитора траффика отдельные запросы. И на основе этих запросов делать вывод о загрузке.

Допустим в последнюю очередь грузиться метрика от гугл. Значит этот запрос и чекаем. Ну и + методы описананные выше, т.к. предложенные мной метод не панацея.
 
а есть инструкция как их дёргать?
Нету... На форуме все давно разжевано... И о чудо даже в последнем конкурсе повторили... Правда в не особо рабочем виде, но это мелочи.. Потому что в работе разработчика - автоматизатора, главный инструмент это поиск... Гуглу, форуму, гитхаб... Ну и тд. И тп.
Но вот незадача... Это про c#, а не про действия ;)
 
 
  • Спасибо
Реакции: djaga
.Я думаю уже партизаны пошли глубоко в лес, чем дальше в лес, тем толще партизаны. Можно у автора узнать, что он делает с загруженной страницы (парсит данные, чекает что-то) ? Возможно решение на поверхности
 
  • Спасибо
Реакции: Mikhail B.
Добавляй проверку ключевых элементов на странице.

Для лучшего эффекта зацикли проверку с прерыванием через условные ~15 секунд.

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

Через ЛОГ трафика не всегда получается корректно проверять такие вещи (это то, что выше советовали). Сам способ рабочий, но может быть в твоей ситуации не поможет.
 
  • Спасибо
Реакции: djaga
Cнипет C# который перед следующим действием, пропустит только после появления нужного элемента на странице
C#:
Развернуть Свернуть Копировать
// https://zenno.club/discussion/threads/progruzka-stranicy-i-ehlementov-na-stranice.10529/#post-62000

var tab = instance.ActiveTab; //получаем активный таб инстанса
int countOfIterations = 20; //максимальное число проверок элемента на странице
int pause = 3; //пауза в секундах после каждой проверки элемента на странице

//главный цикл
for(int i=0;i<countOfIterations;i++)
{
    var he = tab.FindElementByAttribute("textarea","name","text","text",0); // поиск элемента
    if(!he.IsVoid) //проверка на присутствие элемента
    {
        // если нашли
        return he.GetAttribute("value"); //вернет значение атрибута value
        he.SetValue("hi there","Full",false); //установит значение
        he.RiseEvent("click","Full"); //событие клик
        break; //выход из цикла
    }
    System.Threading.Thread.Sleep(pause*1000); // перевод паузы в миллисекунды
}

mRa0UCO.png
 
Cнипет C# который перед следующим действием, пропустит только после появления нужного элемента на странице
C#:
Развернуть Свернуть Копировать
// https://zenno.club/discussion/threads/progruzka-stranicy-i-ehlementov-na-stranice.10529/#post-62000

var tab = instance.ActiveTab; //получаем активный таб инстанса
int countOfIterations = 20; //максимальное число проверок элемента на странице
int pause = 3; //пауза в секундах после каждой проверки элемента на странице

//главный цикл
for(int i=0;i<countOfIterations;i++)
{
    var he = tab.FindElementByAttribute("textarea","name","text","text",0); // поиск элемента
    if(!he.IsVoid) //проверка на присутствие элемента
    {
        // если нашли
        return he.GetAttribute("value"); //вернет значение атрибута value
        he.SetValue("hi there","Full",false); //установит значение
        he.RiseEvent("click","Full"); //событие клик
        break; //выход из цикла
    }
    System.Threading.Thread.Sleep(pause*1000); // перевод паузы в миллисекунды
}

mRa0UCO.png
Да этих снипетов ожидания элемента, на этом форуме как грязи и с логикой проверки получше... Но это же c# , на который у Константина стойкая аллергия :)

Кстати.. А нафига в логике ожидания , у тебя установка значения в элемент ?
И еще вопросик.. А где выход по красной, если элемент не появился по таймауту ?
 
Да этих снипетов ожидания элемента, на этом форуме как грязи и с логикой проверки получше... Но это же c# , на который у Константина стойкая аллергия :-)

Кстати.. А нафига в логике ожидания , у тебя установка значения в элемент ?
И еще вопросик.. А где выход по красной, если элемент не появился по таймауту ?
Внимательнее надо быть, как раз для таких вопросов специально предоставил ссылку на источник в начале снипета)
Предложи лучшее решение!

п.с. "у Константина стойкая аллергия" - не интересует моральное состояние других участников, ответ пишется с учетом что пригодится другим, которым нужно решение а не пустые слова
 
Последнее редактирование:
Внимательнее надо быть, как раз для таких вопросов специально предоставил ссылку на источник в начале снипета)
Предложи лучшее решение!

п.с. "у Константина стойкая аллергия" - не интересует моральное состояние других участников, ответ пишется с учетом что пригодится другим, которым нужно решение а не пустые слова
Лучшее решение, это стандартные кубики, а не вот этот ваш кодинг/шмодинг :)

У нас тут зеррокодинк или что ?

И вообще... Автор темы четко написал , что он про действия.. Ну вот зачем этот c# ему в самом деле...
Хотя... Да, точно, есть же ответ на это выше... Всем пофиг на состояние автора поста, просто дублируют один и тот же код из темы в тему, что бы потом у других при поиске вылезало 100500 вариантов одного и того же... Смекалочка.
 
Последнее редактирование:
Лучшее решение, это стандартные кубики, а не вот этот ваш кодинг/шмодинг :-)
Если б ты понимал еще для чего именно этот сниппет то наврятли такие глупости писал.
Такое стандартными кубиками обыычно чтобы воспроизвести то надо несколько и по скорости уступают
 
Если б ты понимал еще для чего именно этот сниппет то наврятли такие глупости писал.
Такое стандартными кубиками обыычно чтобы воспроизвести то надо несколько и по скорости уступают
Да ты угораешь... Я понял... Это такой рофл :)

Скорость ? Несколько ? Не понимаешь что делает снипет ... Последнее так насмешило мои тапочки :)

Один стандартный кубик ожидания элемента, делает тоже самое что и твой код, да еще и выход по красной имеет, в отличии от твоего кода, когда нашел не нашел, выходит всегда по зеленой.
Уж если решил как готовое решение выложить, так доработай уж до рабочего... Добавь что ли уже проверку на видимость элемента, что бы не реагировал на невидимые пиксели, сделай поиск по нормальному, через нормальный xpath, убери установку значения в элемент и клик по нему... Ты так и не ответил нафига ты добавил это в код , который должен только ожидать появление элемента ?

И как так получилось, что код один, а на скрине у тебя совсем другой код ? Какой верный то ?
А break что делает, ну тот что в мертвой ветке, который никогда в жизни не выполнится ? :)
 

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