@moonsoon Автор модуль не обновляет, поэтому я решил совместимую с BAS версией от 31.1.0 и выше, выложить версию модуля тут LegacyAI_0.16_BAS31_ASYNC_SCOPE_FIX.zip
скорее это делаю для себя, чтобы всегда иметь под рукой дистриб модуля)
Название: waitinger;
Версия: 1.0;
Данные: waitinger.zip
Согласие на добавление модуля в BAS: да;
Описание:
Кратко: ожидает появление хотя бы одного элемента из 20 возможных. Можно задавать поиск по CSS, XPATH, MATCH и base64.
Возможности модуля:
а) ждать появления на странице одного из 20 элементов разных типов (СSS, base64 и т.д.);
г) задавать таймаут для осуществления вышеуказанных действий;
д) задавать простые действия при обнаружении элемента (кликнуть, двигать мышь над элементом, очистить поле)
Работа с результатом: Модуль возвращает переменную [[ELEM]] в виде объекта, где содержится информация:
1) [[ELEM]].timeout - булево значение (true или false), сигнализирующее о срабатывании таймаута и об отсутствии на странице заданных элементов. Таймаут не выдаёт дефолтную ошибку кубика и не прерывает скрипт. Для того, чтобы проверить, сработал ли таймаут, просто вставьте конструкцию [[ELEM]].timeout в кубик IF.
2) [[ELEM]].found - первый найденный элемент, возвращает либо undefined (сработал таймаут или элемента нет на странице), либо строку с селектором;
3) [[ELEM]].bool[N] - где N - порядковый номер. Возращает либо true, либо false. Позволяет проверить найден ли указанный в модуле элемент под определенным номером. Например, [[ELEM]].bool[5] вернёт true или false для 5 элемента, который был вбит для поиска в данную функцию. Помните, что элемент может иметь значение false, даже если он присутствует на странице, это происходит из-за того, что элемент порядковым числом выше был найден первее, а модуль останавливает работу, как только найдет первый попавшийся элемент;
4) [[ELEM]].bool.nN - где N - порядковый номер. Это аналог предыдущего написания. Например, [[ELEM]].bool.n5 вернёт true или false для 5 элемента;
5) [[ELEM]].val[5] или [[ELEM]].val.n5 - значение 5 элемента, введенного пользователем для поиска, вместо "5" подставьте любую другую интересующую цифру.
Особенности работы модуля:
Ver. 2.0
@gomeapat said in Умный ожидатель:
А разве стандартное действие проверить существование элемента на странице не позволяет указывать timeout ?
нет, ожидание элемента позволяет
@olegtut said in Умный ожидатель:
Обязательно в незаполняемых полях элементов оставлять NULL. Скрипт всё равно не даёт оставлять поле пустым (старожилы, подскажите, как исправить),
Проверка в файлах ..._select.js
@Antonio said in Умный ожидатель:
Интересная штука. А можно пример применения?
Ну к примеру, мы ждем после ввода пароля появления либо капчи, либо подтверждения мыла, либо телефона, либо что акк заблочен и т.д. Чтобы перейти к следующему действию после ввода пароля, надо дождаться одно из этих действий. И тут у нас два варианта стандартных действий:
@olegtut Начну с мелких придирок :D.





Теперь к более серьёзным замечаниям:

Вместо кучи непонятных инпутов с текстом NULL лучше создать один, который принимает массив селекторов (ну или строку с разделителем)
Судя по коду модуля вы его создали из функции BAS. Можете приложить проект на основании которого создали модуль? Дело в том, что в коде есть не совсем понятные места, например зачем выходить из цикла "while" меткой?

Опцию "ДЕЙСТВИЯ ПРИ ОБНАРУЖЕНИИ ЭЛЕМЕНТА" лучше убрать в принципе, так как действие призвано ожидать элемент, а не взаимодействовать с ним. Для удобства лучше вывести селектор, на котором сработало действие в переменную результата выполнения.
Если же решишь оставить опцию "ДЕЙСТВИЯ ПРИ ОБНАРУЖЕНИИ ЭЛЕМЕНТА", то лучше использовать выпадающий список с вариантами действия, чем выбор цифрами. В существующих модулях можно подсмотреть пример использования
@Fox Спасибо, принято. Как будет время поправлю.
Описание первых двух полей действия написаны капсом
Не планировал добавлять английскую локализацию.
Отсутствует описание для полей селекторов элементов
Ну тут тогда на всех 20-ти придется прописывать :)
Вместо кучи непонятных инпутов с текстом NULL лучше создать один, который принимает массив селекторов (ну или строку с разделителем)
Я думал над этим, но тут есть несколько камней преткновения:
Судя по коду модуля вы его создали из функции BAS.
Так и есть. Я обнаружил, что стандартными действиями реализовать задуманную логику невозможно, либо громоздко, поэтому юзал еще и функции БАС.
зачем выходить из цикла "while" меткой
Я организовал вложенный цикл, просто при помощи одного break там не выйти.
Можете приложить проект на основании которого создали модуль?
Конечно. Вот он: modules v2.xml
Делал для себя похожее, только без return
Ждал 1 элемент
Хорошо бы добавить время сна после нахождения элемента, но по умолчанию 0
А вот "ДЕЙСТВИЯ ПРИ ОБНАРУЖЕНИИ ЭЛЕМЕНТА" я позаимствую)
@olegtut
Попробовал модуль, интересная задумка, но не хватает некоторых функций, поэтому оказался для меня не полезным.