Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как узнать повяление такого сообщения на странице ? (https://javascript.ru/forum/css-html/80053-kak-uznat-povyalenie-takogo-soobshheniya-na-stranice.html)

selevo 22.04.2020 10:59

Как узнать повяление такого сообщения на странице ?
 
Хочу в корзине на aliexpress автоматически нажимать ОК при удалении товара. :)
Надоело каждый раз кликать подтверждение удаления.
Спасибо.
gif ролик
https://psv4.userapi.com/c856320/u47...9Tx2_NJRU5Ss5A

Сейчас у меня такой код
var korzinaDelOKid = ("body > div.next-overlay-wrapper.opened > div.next-dialog.next-closeable.next-overlay-inner > div.next-dialog-footer.next-align-left > button.next-btn.next-medium.next-btn-primary.next-dialog-btn");

    //  Ожидание клика
   if (1)
      {document.body.onclick = function(e)
       {
             console.log('СТАРТ ОБРАБОТКИ КЛИКА\n');
           setTimeout(ClikOKdelete, 200); // задержка 200 милисекунд и запуск опроса наличия кнопки

           // alert ('click');


       }
      }
    function ClikOKdelete (){
if (document.querySelector (korzinaDelOKid)); //Проверка есть ли элемент кнопки подтверждения удаления из корзины
        {

     console.log('Кнопка  ОК подтверждения удаления обнаруженаы\n');
   // document.querySelector (korzinaDelOKid).click();
        }

};


он код кнопки обнаруживает, но даже когда это окно не появляется на экране.
В любом место экрана кликаю мышкой и сообщает что кнопка обнаружена.
Не пойму почему.

voraa 22.04.2020 12:18

Цитата:

Сообщение от selevo (Сообщение 523182)

он код кнопки обнаруживает, но даже когда это окно не появляется на экране.
В любом место экрана кликаю мышкой и сообщает что кнопка обнаружена.
Не пойму почему.

Может обнаруживать, когда кнопка есть, но просто не видима.
Когда она сама или какой то ее родительский блок имеет display:none.

selevo 22.04.2020 13:00

Я думаю это оверлейный вывод сообщения.
Как отследить что появилось оверлейное окно ?

selevo 22.04.2020 13:01

Цитата:

Сообщение от voraa (Сообщение 523186)
Может обнаруживать, когда кнопка есть, но просто не видима.
Когда она сама или какой то ее родительский блок имеет display:none.

А что мне с ней делать когда она нивидима ?
у меня и сейчас так определяет наличие кнопки когда она невидима, даже ничего делать не пришлось ))
Мне надо наоборот когда видима.

voraa 22.04.2020 13:07

Проверять offsetWidth кнопки. Когда видима, offsetWidth будет не равно 0

selevo 22.04.2020 17:15

Цитата:

Сообщение от voraa (Сообщение 523192)
Проверять offsetWidth кнопки. Когда видима, offsetWidth будет не равно 0

я поставил такое условие
if ((document.querySelector(korzinaDelOKid).offsetWidth)!=0); //Проверка есть ли кнопка подтверждения удаления из корзины

условие проходит проверку даже если окна нет.
а вывод в консоль собщает
Cannot read property 'offsetWidth' of null
Но если окно есть то выдает размер.
Но почему условие проходит если условие 'offsetWidth' of null
Не понятно...



var korzinaDelOKid = ("body > div.next-overlay-wrapper.opened > div.next-dialog.next-closeable.next-overlay-inner > div.next-dialog-footer.next-align-left > button.next-btn.next-medium.next-btn-primary.next-dialog-btn");
             function ClikOKdelete ()
   {
if ((document.querySelector(korzinaDelOKid).offsetWidth)!=0); //Проверка есть ли кнопка подтверждения удаления из корзины

        {

     console.log('Кнопка  ОК подтверждения удаления обнаруженаы\n');
              console.log(document.querySelector (korzinaDelOKid).offsetWidth);

   // document.querySelector (korzinaDelOKid).click();
        }

  }

    //  Ожидание клика
   if (1)
      {document.body.onclick = function(e)
       {
             console.log('СТАРТ ОБРАБОТКИ КЛИКА\n');
         setTimeout(ClikOKdelete, 200); // задержка 200 милисекунд и запуск опроса наличия кнопки

           // alert ('click');



       }
      }

voraa 22.04.2020 17:26

if ((document.querySelector(korzinaDelOKid).offsetWid th)!=0); //Проверка есть ли кнопка подтверждения удаления из корзины

Что означает эта ; ?

MC-XOBAHCK 22.04.2020 19:39

Цитата:

Сообщение от selevo
Как отследить что появилось оверлейное окно ?

Есть такая штука - MutationObserver

Вот накидал:
function clikOKdelete() {
    console.log('Появилось окно');

    let btnOK = document.querySelector('button.next-btn.next-btn-primary.next-dialog-btn');

    console.log(btnOK);

    let eventClick = new Event('click');
    btnOK.dispatchEvent(eventClick);
}

var mutationObserver = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if(mutation.oldValue == 'next-dialog next-closeable next-overlay-inner fadeInDown') {
            clikOKdelete();
        }
    });
});

mutationObserver.observe(document.documentElement, {
    attributes: true,
    characterData: true,
    childList: true,
    subtree: true,
    attributeOldValue: true,
    characterDataOldValue: true
});


Не пойму почему событие клика из dispatchEvent не срабатывает. А так логи расставил - обнаружение срабатывает правильно.

selevo 22.04.2020 20:55

voraa,
о,вот косяк )))
Но непомогло...

selevo 22.04.2020 20:56

MC-XOBAHCK,

cпасибо, давно хотел заняться MutationObserver!
В прошлый раз не получилось с ним, надеюсь в этот раз получится.


Часовой пояс GMT +3, время: 23:30.