Умный ожидатель



  • Название: 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" подставьте любую другую интересующую цифру.

    • Особенности работы модуля:

    1. Модуль прерывает свое выполнения как только обнаружит первый попавшийся элемент;
    2. Модуль проходится в стандартном порядке по элементам от 1 до 20. Элементы так же могут быть указаны в разном порядке, не обязательно начиная с первого;
    3. Обязательно в незаполняемых полях элементов оставлять NULL. Скрипт всё равно не даёт оставлять поле пустым (старожилы, подскажите, как исправить), если вы вобьёте туда что-то другое за исключением селекторов, то алгоритм решит, что это base64, а BAS реагирует крайне негативно на некорректный base :)
    4. По умолчанию таймаут указан 0, что означает бесконечный поиск, но я по разумным причинам не рекомендую так выстраивать логику поиска, впрочем, это вы уже решите сами;
    5. Поиск по base64 имеет дефолтные параметры: не скролит страницу и выставляет индекс похожести на 80.


  • Спасибо за модуль. Теперь нет необходимости писать трудночитаемый Xpath для множества элементов.



  • Интересная штука. А можно пример применения?



  • А разве стандартное действие проверить существование элемента на странице не позволяет указывать timeout ?



  • @gomeapat said in Умный ожидатель:

    А разве стандартное действие проверить существование элемента на странице не позволяет указывать timeout ?

    нет, ожидание элемента позволяет



  • @olegtut said in Умный ожидатель:

    Обязательно в незаполняемых полях элементов оставлять NULL. Скрипт всё равно не даёт оставлять поле пустым (старожилы, подскажите, как исправить),

    Проверка в файлах ..._select.js



  • @Antonio said in Умный ожидатель:

    Интересная штука. А можно пример применения?

    Ну к примеру, мы ждем после ввода пароля появления либо капчи, либо подтверждения мыла, либо телефона, либо что акк заблочен и т.д. Чтобы перейти к следующему действию после ввода пароля, надо дождаться одно из этих действий. И тут у нас два варианта стандартных действий:

    1. Выставить задержку "спать", чтобы подгрузился один из 10 (к примеру) этих элементов. Но нет гарантии, что вы угадаете время, и вообще этот метод для плохих скриптов. Умельцы вообще не юзают "спать".
    2. В скрипте пришлось бы организовать бесконечный цикл, который каждый раз проверяет все 10 элементов на появление. Код становится громоздким и не очень красивым.
      Для таких целей придуман модуль, который всего за один кубик кода будет ждать появление одного из 20 возможных элементов.
      Где можно применять такой модуль? Чаще всего в сервисах, где есть нелинейная структура вывода html. Например, авторизация вк. В зависимости от того, насколько чист ваш браузер, вк после ввода пароля покажет вам либо капчу, либо что ваш акк заморожен, либо стартовую страницу сайта. После ввода пароля загоняем в модуль элемент с капчей, элемент о заморозке акка, элемент стартовой страницы и скрипт сам будет ждать, пока что-нибудь из этого не появится.


  • @olegtut , потом получаем из модуля значение, какой именно элемент появился и уже через if какие-то действия выполняем?



  • do you have a chance to add English to this



  • @Antonio said in Умный ожидатель:

    @olegtut , потом получаем из модуля значение, какой именно элемент появился и уже через if какие-то действия выполняем?

    Всё верно.



  • В качестве пожелания на будущие апдейты модуля:
    если это возможно, добавить количество найденных элементов в интерфейс. По аналогии с "Ждать появления элемента".
    Такой счетчик сильно облегчает написание селектора.



  • @olegtut Начну с мелких придирок :D.

    • Название всех модулей BAS начинаются с заглавной буквы

    9a0c9c95-dc8b-4759-8330-b9cc78d8ac6f-изображение.png

    • Название действия на английской локализации названо через нижнее подчёркивание "waiting_for_one"

    e7987b29-dbc3-4cbc-9b30-9108daf8861a-изображение.png

    • Описание первых двух полей действия написаны капсом

    7afd6035-118f-453e-a984-a2d959ce1c5a-изображение.png

    • Отсутствует английское описание действия и его полей

    f633735e-6907-4eb6-9c40-05839a0747f4-изображение.png

    • Отсутствует описание для полей селекторов элементов

    06546221-0321-4856-bb95-1860d559ed1b-изображение.png

    • Описание действия нужно дополнить более подробными примерами использования этого действия (например с тем, как использовать итоговый объект)

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

    • Действие без селекторов намертво зависает, а должно выдавать ошибку при попытке сохранить такое действие

    support823.gif

    • Вместо кучи непонятных инпутов с текстом NULL лучше создать один, который принимает массив селекторов (ну или строку с разделителем)

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

    d9b494ec-21d2-4f61-8a27-eda963012354-изображение.png

    • Опцию "ДЕЙСТВИЯ ПРИ ОБНАРУЖЕНИИ ЭЛЕМЕНТА" лучше убрать в принципе, так как действие призвано ожидать элемент, а не взаимодействовать с ним. Для удобства лучше вывести селектор, на котором сработало действие в переменную результата выполнения.

    • Если же решишь оставить опцию "ДЕЙСТВИЯ ПРИ ОБНАРУЖЕНИИ ЭЛЕМЕНТА", то лучше использовать выпадающий список с вариантами действия, чем выбор цифрами. В существующих модулях можно подсмотреть пример использования


Log in to reply