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

prostors

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

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

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

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
Если вы просто хотите дождаться полной загрузки страницы в браузере, вы можете использовать следующий код

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

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48
Если вы просто хотите дождаться полной загрузки страницы в браузере, вы можете использовать следующий код

JavaScript:
window.onload = function() {
    //какие-то действия
};
В кубике можно выбрать как выполнять , при загрузке странице, при создание окна и т.д
Я про действия zenno писал
 

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48
вопрос - должно ли действие "Переход на страницу" дожидаться догрузки js в DOM?
 

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
Я про действия zenno писал
Создаете кубик javascript в проекте, он будет ждать пока страница полностью не загрузиться. То есть Переход на страницу-кубик js - ваш остальной код
 

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
  • Спасибо
Реакции: prostors

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
Главное не забудьте установить "при загрузке странице" - "все время" или выберите другие настройки в кубике какие вам надо. В верху в кубике увидите
 
  • Спасибо
Реакции: prostors

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48
Главное не забудьте установить "при загрузке странице" - "все время" или выберите другие настройки в кубике какие вам надо. В верху в кубике увидите
129838 вот так выходит по красному без комментариев в логе
 

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
Надо положить результат в переменную, ниже в кубике
 
  • Спасибо
Реакции: prostors

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
Этот кубик javasript срабатывает, когда весь контент страницы (включая HTML, CSS, изображения и другие ресурсы) полностью загружен. Это означает, что все элементы на странице доступны для взаимодействия. То есть сначала вы делаете переход на страницу, потом выполняется этот кубик и он проверят что все элементы загружены, когда это праизайдет, он выйдет по зеленой ветке
 

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63
Ajax запросы все еще существуют и их активно используют веб разработчики... Как и вебсокеты...

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

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

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

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 472
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Можно дергать с монитора траффика отдельные запросы. И на основе этих запросов делать вывод о загрузке.

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

prostors

Client
Регистрация
16.12.2020
Сообщения
1 208
Благодарностей
44
Баллы
48

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63
а есть инструкция как их дёргать?
Нету... На форуме все давно разжевано... И о чудо даже в последнем конкурсе повторили... Правда в не особо рабочем виде, но это мелочи.. Потому что в работе разработчика - автоматизатора, главный инструмент это поиск... Гуглу, форуму, гитхаб... Ну и тд. И тп.
Но вот незадача... Это про c#, а не про действия ;-)
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 472
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 472
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

 
  • Спасибо
Реакции: djaga

dihard

Client
Регистрация
08.11.2019
Сообщения
318
Благодарностей
51
Баллы
28
.Я думаю уже партизаны пошли глубоко в лес, чем дальше в лес, тем толще партизаны. Можно у автора узнать, что он делает с загруженной страницы (парсит данные, чекает что-то) ? Возможно решение на поверхности
 
  • Спасибо
Реакции: Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 472
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

  • Спасибо
Реакции: djaga

usawa0

Client
Регистрация
29.11.2019
Сообщения
76
Благодарностей
22
Баллы
8

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
840
Благодарностей
562
Баллы
93
Добавляй проверку ключевых элементов на странице.

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

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

Через ЛОГ трафика не всегда получается корректно проверять такие вещи (это то, что выше советовали). Сам способ рабочий, но может быть в твоей ситуации не поможет.
 
  • Спасибо
Реакции: djaga

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 035
Благодарностей
559
Баллы
113
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); // перевод паузы в миллисекунды
}
 

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63
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); // перевод паузы в миллисекунды
}
Да этих снипетов ожидания элемента, на этом форуме как грязи и с логикой проверки получше... Но это же c# , на который у Константина стойкая аллергия :-)

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

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 035
Благодарностей
559
Баллы
113
Да этих снипетов ожидания элемента, на этом форуме как грязи и с логикой проверки получше... Но это же c# , на который у Константина стойкая аллергия :-)

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

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

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63
Внимательнее надо быть, как раз для таких вопросов специально предоставил ссылку на источник в начале снипета)
Предложи лучшее решение!

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

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

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

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 453
Благодарностей
5 472
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с Mikhail B. какие-либо сделки.

  • Спасибо
Реакции: kagorec

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63

kagorec

Client
Регистрация
24.08.2013
Сообщения
1 035
Благодарностей
559
Баллы
113
Лучшее решение, это стандартные кубики, а не вот этот ваш кодинг/шмодинг :-)
Если б ты понимал еще для чего именно этот сниппет то наврятли такие глупости писал.
Такое стандартными кубиками обыычно чтобы воспроизвести то надо несколько и по скорости уступают
 

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
252
Баллы
63
Если б ты понимал еще для чего именно этот сниппет то наврятли такие глупости писал.
Такое стандартными кубиками обыычно чтобы воспроизвести то надо несколько и по скорости уступают
Да ты угораешь... Я понял... Это такой рофл :-)

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

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

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

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