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

Поддержка
  • Действие "Выполнить 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 элементов подряд не видны, значит что-то закрыло их и бот закрывает этот сайт.

  • Чето я поспешил, в общем если элемент находиться вне видимой зоны экрана, то экшен сначала крутит к нему мышку, но то JS скрипт отдасть false типо он скрыт. Также где-то с шансом 1 к 5 срабатывает ложно. Элемент на самом деле виден, но js отдает нет.

    Я бы конечно сам проскролил, но там действие "прокрутка к элементу" палевная, крутит скрол за 1 сек.

  • @FastSpace да поэтому у меня это сделано немного по-другому. Я получаю ссылки и проверяю их на доступность, но делаю это все скриптом в браузере, поэтому хоть 500 ссылок проверяет очень быстро.

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

    @FastSpace да поэтому у меня это сделано немного по-другому. Я получаю ссылки и проверяю их на доступность, но делаю это все скриптом в браузере, поэтому хоть 500 ссылок проверяет очень быстро.

    Кликаешь только по href=xxx? Ну как-то не оч. это.

  • @FastSpace нет, сейчас и по кнопкам и рекламе

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

    @FastSpace нет, сейчас и по кнопкам и рекламе

    Решение от @Fox не работает как надо, пойду курить сайт learn.javascript

    1. Если элемент находиться не видимой зоны экрана = false
    2. Если элемент имеет часть внутри развертки элемента, тоже false. Шас только что элемент кнопки на ютубе отдал false :( хотя кнопку видно 100% и ничего не закрывает.
  • @UserTrue said in Модальные окна, как их обрабатывать:

    @FastSpace да поэтому у меня это сделано немного по-другому. Я получаю ссылки и проверяю их на доступность, но делаю это все скриптом в браузере, поэтому хоть 500 ссылок проверяет очень быстро.

    Только шас дошло, типо ты как попал на страницу сразу чекаешь кучу ссылок и если ну прям все закрыто, то только это значит их что-то закрыло?