Тоже вчера задумался над этим и написал такой модуль сам)
Ожидание исчезновения элемента
-
Доброго времени всем! Не давно начал использовать BAS, очень понравилась. Начал писать свой первый скрипт и появилась острая нужда в функции "Ожидание исчезновения элемента", нашел несколько тем 2017 года на форуме где уважаемая @support обещали сделать такую функцию, но в BAS-е такую функцию не нашёл.
Как можно реализовать такую функцию?
-
@Valijon said in Ожидание исчезновения элемента:
Доброго времени всем! Не давно начал использовать BAS, очень понравилась. Начал писать свой первый скрипт и появилась острая нужда в функции "Ожидание исчезновения элемента", нашел несколько тем 2017 года на форуме где уважаемая @support обещали сделать такую функцию, но в BAS-е такую функцию не нашёл.
Как можно реализовать такую функцию?
Проверяйте в цикле существование элемента, и как действие вернёт false - продолжаете работу
-
@Valijon said in Ожидание исчезновения элемента:
@Fox читал что можно ещё через ожидание элемента сделать на Xpath not() но примера не нашёл
Да, только вы учтите, что логическое НЕ будет находить просто все другие селекторы
:DНапример на странице выдачи гугла xpath запрос
//div[@class="r"]выдаст 8 результатов, а тот же запрос с логиским НЕ
//div[not(@class="r")]выдаст уже 471 результата, так как просто собирает все div, class которых не равен "r"
Вы посмотрите код действия "ожидание элемента", точнее код функции этого действия wait_element_visible():
function wait_element_visible() { var text_success = null; var text_fail = null; var func = null; if(arguments.length === 2) { text_success = arguments[0]; func = arguments[1]; }else if(arguments.length === 3) { text_success = arguments[0]; text_fail = arguments[1]; func = arguments[2]; }else { die("Wrong number of arguments"); } if(text_fail) { _set_result(false); wait(tr("Failed to wait for element ") + text_success,function(){ _set_result(false); get_element_selector(_arguments()[0]).exist(function(){ _set_result(_result() === 1 || _result() === true); }) }, function(){ _set_result(false); get_element_selector(_arguments()[1]).exist(function(){ _set_result(_result() === 1 || _result() === true); }) },[text_success,text_fail],func); }else { _set_result(false); wait(tr("Failed to wait for element ") + text_success, function(){ if(BROWSERAUTOMATIONSTUDIO_WAIT_ITERATION == 8) _info(tr("Waiting for element ") + text_success) _set_result(false); get_element_selector(_arguments()).script("document.readyState!='loading' && self.getBoundingClientRect().height > 0 && self.getBoundingClientRect().width > 0&& window.getComputedStyle(self)['display']!='none'&&window.getComputedStyle(self)['visibility'] != 'hidden'",function(){ _set_result(_result().indexOf("true")>=0); }) },text_success,func); } }Вы можете просто скопировать весь код под другим названием функции, изменив условие выхода из цикла
"document.readyState!='loading' && self.getBoundingClientRect().height > 0 && self.getBoundingClientRect().width > 0&& window.getComputedStyle(self)['display']!='none'&&window.getComputedStyle(self)['visibility'] != 'hidden'" //код я не менял, просто указал что надо менятьи использовать эту функцию через действие "выполнить код".
Или, всё таки использовать мой совет и сделать стандартными действиями в 4 кубика..

-
@Valijon На каждый случай, если добавлять действия то вырастет огромный монстр. В БАС есть базовые действия которых вполне достаточно для решения любой задачи, если кому то лень то это личная половая драма. Можете в конце концов сделать свой модуль, если для вас это такая частая задача.
-
@UserTrue Вообще на каждый случай может и не надо добавлять функционал но именно эту функцию (Ожидание исчезновения элемента) уже с 2017 года в нескольких темах запрашивали. Не все новички разберутся как это реализовать базовыми действиями, а BAS рассчитан на тех кто не силен в программировании, те кто шарит в кодах он может сделать себе и модуль и функцию реализовать и здесь не задавать разных вопросов.
-
@Valijon said in Ожидание исчезновения элемента:
Не все новички разберутся как это реализовать базовыми действиями, а BAS рассчитан на тех кто не силен в программировании, те кто шарит в кодах он может сделать себе и модуль и функцию реализовать и здесь не задавать разных вопросов.
Модули БАС, если что пишутся на тех же кубиках и как вы выразились в кодах шарить тут не надо. И да БАС рассчитан на тех кто не силен в программирование, но если отсутствует логическое мышление, то это не спасет. Алгоритмы строить все равно надо. А хотелок тут всяких столько, что если все их реализовать то будет проще изучить программирование, чем разобраться потом во всех этих кубиках.
-
@Valijon said in Ожидание исчезновения элемента:
В другой теме по отправке капчи вы не нашли нужный функционал и изучили js
Там было не о капче, а о реверсе браузерных скриптов. И там разработчик продемонстрировал, что безголовый браузер не сильно уменьшит нагрузку, а по моему нынешнему опыту и не всегда справится с задачей, поэтому для этого надо учить js тк это не автоматизировать полностью.