Модальные окна, как их обрабатывать



  • На сайте рэндомно может появится элемент в виде окна, где нужно нажать "ок" или закрыть его, на подобие такого, когда появляется сообщение о согласии использования cookies внизу страницы где нужно нажать ок чобы оно исчезло. Так вот проблема в том, что если такое окно не закрыть, то все остальные действия на сайте(заполнения формы и т.д.) будут кривые или вообще не работать пока окно не убрать. Также проблема в том, что окна вылазиют разные. Есть ли какое то
    универсальное действие(может какое то событие js ваполнить на странице, чтобы убирать эти окна)
    Ну и по старой доброй традиции:
    alt text



  • @serrgo используй алгоритм:

    1. проверка наличия элемента на странице(когда модальное окно появится нажми по "где нужно нажать "ок"" правой кнопкой мыши и найди приверку) с включенной опцией проверки наличия на странице
    2. if(условие) с переменной от прошлого пункта
    3. в ветке условия засунь нажатие на кнопку

    пример:

    Снимок.JPG



  • спасибо за внимание к вопросу конечно, но я же написал, что селектор этого окна изначально не известен, простым языком, нужно любую хрень убрать с экрана, которая появилась и загораживает нам страницу



  • @serrgo said in Модальные окна, как их обрабатывать:

    На сайте рэндомно может появится элемент в виде окна, где нужно нажать "ок" или закрыть его, на подобие такого, когда появляется сообщение о согласии использования cookies внизу страницы где нужно нажать ок чобы оно исчезло. Так вот проблема в том, что если такое окно не закрыть, то все остальные действия на сайте(заполнения формы и т.д.) будут кривые или вообще не работать пока окно не убрать. Также проблема в том, что окна вылазиют разные. Есть ли какое то
    универсальное действие(может какое то событие js ваполнить на странице, чтобы убирать эти окна)
    Ну и по старой доброй традиции:

    Определяй координаты рандомного селектора на странице, а затем определяй селектор по этим координатам (ищи метод js), после этого сравнивай их, если это один и тот же элемент, значит ни какого меню нет
    Я бы помог с примером, но из за картинки пожалуй не стану.



  • @Fox said in Модальные окна, как их обрабатывать:

    Я бы помог с примером, но из за картинки пожалуй не стану.

    OH NOOOO!!! Это же шуточная картинка которая не несет в себе цели оскорбить, унизить, обозвать, оклеветать, обидеть, расстроить, испортить настроение, разозлить, приуныть, опечалить, огорчить.. Короче говоря ты наше все на этом форуме, помогать не надо главное не обижайся



  • @serrgo said in Модальные окна, как их обрабатывать:

    @Fox said in Модальные окна, как их обрабатывать:

    Я бы помог с примером, но из за картинки пожалуй не стану.

    OH NOOOO!!! Это же шуточная картинка которая не несет в себе цели оскорбить, унизить, обозвать, оклеветать, обидеть, расстроить, испортить настроение, разозлить, приуныть, опечалить, огорчить.. Короче говоря ты наше все на этом форуме, помогать не надо главное не обижайся

    Да я вроде не обиделся, но и юмора не оценил. Кстати пример решения подобной задачи я где то выкладывал на форуме



  • Действие "Выполнить Javascript На Элементе"

    document.elementFromPoint(self.getBoundingClientRect().left + 1, self.getBoundingClientRect().top + 1) == self
    

    Тестовый скрипт

    Если вам нужно определять не закрыт ли элемент частично, то для этого нужно либо проверять попиксельно весь элемент, или обойтись тем местом, куда собираетесь кликать, тогда устанавливайте координаты клика сами:

    document.elementFromPoint(VAR_X, VAR_Y) == self
    


  • @Fox у меня такая же тема и я пока болт забил на этот трабл. Скорее всего человек греет профиля.

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



  • @FastSpace said in Модальные окна, как их обрабатывать:

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

    Находить и закрывать такие элементы не так просто как кажется и врядли кто-то будит заниматься ради благой кармы ))



  • @UserTrue said in Модальные окна, как их обрабатывать:

    @FastSpace said in Модальные окна, как их обрабатывать:

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

    Находить и закрывать такие элементы не так просто как кажется и врядли кто-то будит заниматься ради благой кармы ))

    Ты у себя также сделал? Прочекал это окно и если оно есть просто свалил с сайта? Я тут представил как закрывать эту шнягу если она во фрейме. Это надо только заморочиться искать нужный фрейм и проверять элементы там.



  • @FastSpace said in Модальные окна, как их обрабатывать:

    Ты у себя также сделал? Прочекал это окно и если оно есть просто свалил с сайта? Я тут представил как закрывать эту шнягу если она во фрейме. Это надо только заморочиться искать нужный фрейм и проверять элементы там.

    Типо того. Я делал закрывалку, но не довел до ума. Закрыть эту шнягу как бы не так просто, могут быть побочные эффекты для сайта, то есть можно его сломать)



  • @UserTrue Ну общие селекторы все таки есть изредка. Типо "Закрыть", "Close". Можно попытаться разок кликнуть туда и если не отпустило, то уже все - валить с сайта. Fox вовремя решение скинул, у меня все руки не доходили это сделать, завтра гляну как оно там.



  • @FastSpace said in Модальные окна, как их обрабатывать:

    @UserTrue Ну общие селекторы все таки есть изредка. Типо "Закрыть", "Close". Можно попытаться разок кликнуть туда и если не отпустило, то уже все - валить с сайта.

    Это тоже пробовал, но потом мне стало лень тк для прогрева это не критично и я не стал морочиться сильно



  • @FastSpace said in Модальные окна, как их обрабатывать:

    Скорее всего человек греет профиля.

    Нет, просто при логе в акк бывает вылазиет окно, и не всегда одно и тоже(мы там что то обновили на сайте, как вам такое предложение, примите куки и прочее) На нескольких сайтах встречался с таким, и при появлении окна нового типа логика естественно сыпалась и приходилось писать новый костыль для новообразовавшегося окна. Хотелось узнать возможно ли универсальное решение под подобные окна.



  • Код действия "Двигать Мышь И Кликнуть На Элемент" с добавленной проверкой перекрытия элемента в точке клика:

    _SELECTOR = " \u003eCSS\u003e .catalog-menu \u003e .green-button";
    wait_element_visible(_SELECTOR)!
    _call(_random_point, {})!
    _if(_result().length > 0, function () {
        move({})!
        get_element_selector(_SELECTOR, false).clarify(X, Y)!
        _call(_clarify, {})!
        get_element_selector(_SELECTOR, false).script("document.elementFromPoint(" + X + ", " + Y + ") == self")!
        _cycle_params().if_else = (_result() == "true");
        _if(_cycle_params().if_else, function () {
            log("Клик")
            mouse(X, Y)!
        })!
        _if(!_cycle_params().if_else, function () {
            log("Элемент для клика скрыт другим элементом")
        })!
    })!
    

    Тестовый скрипт

    Для удобства использования можно создать свой модуль с этим кастомным действием.



  • @Fox Это бы в сборочку добавить баса официально.



  • @FastSpace said in Модальные окна, как их обрабатывать:

    @Fox Это бы в сборочку добавить баса официально.

    Официально не добавят, я спросил. Но как я и писал выше, можно создать своё действие с этой опцией в кастомном модуле.



  • @Fox said in Модальные окна, как их обрабатывать:

    @FastSpace said in Модальные окна, как их обрабатывать:

    @Fox Это бы в сборочку добавить баса официально.

    Официально не добавят, я спросил. Но как я и писал выше, можно создать своё действие с этой опцией в кастомном модуле.

    В общем спасибо за решение. Добавил в шаб прогрева, все работает четко. Оказалось таких сайтов не мало ))



  • @FastSpace а чем тебе это решение помогло? Окно же оно не закрывает. У меня подобное решение тоже используется



  • @UserTrue said in Модальные окна, как их обрабатывать:

    @FastSpace а чем тебе это решение помогло? Окно же оно не закрывает. У меня подобное решение тоже используется

    Тем что раньше были клики в пустую, сделал что если 5 элементов подряд не видны, значит что-то закрыло их и бот закрывает этот сайт.


Log in to reply
 

  • 4
  • 3
  • 3
  • 3
  • 2
  • 9
  • 3
  • 9