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!
В прошлый раз не получилось с ним, надеюсь в этот раз получится.

selevo 22.04.2020 21:09

пока готовый рабочий скрипт
Код:

// ==UserScript==
// @name        JS_AliexpDelinCart авто подтверждение удаления товара из корзины на алике
// @namespace    http://tampermonkey.net/
// @version      0.1 (20200422112640)
// @description  автоподтверждение  удаления товара в корзине на алике.
// @author      izhadapter
// @match        https://shoppingcart.aliexpress.ru/shopcart/shopcartDetail.htm*
 // @match      https://shoppingcart.aliexpress.com/shopcart/shopcartDetail.htm*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    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)!=null) //Проверка есть ли кнопка подтверждения удаления из корзины
        {

    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, 100); // задержка 200 милисекунд и запуск опроса наличия кнопки

          // alert ('click');

      }
      }
})();


MC-XOBAHCK 22.04.2020 21:51

Вот рабочее расширение для хрома:
Файл manifest.json
{
    "manifest_version": 2,
    "name": "Aliexpress",
    "description": "Чистка корзины",
    "author": "selevo",
    "version": "1.0.1",
    "icons": {
        "16": "img/16.png",
        "48": "img/48.png",
        "128": "img/128.png"
    },
    "content_scripts": [
        {
            "matches": [
                "https://shoppingcart.aliexpress.ru/shopcart/shopcartDetail.htm*",
                "https://shoppingcart.aliexpress.com/shopcart/shopcartDetail.htm*"
            ],
            "js": ["script.js"],
            "run_at": "document_idle"
        }
    ]
}


Файл script.js
var mutationObserver = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if(mutation.oldValue == 'next-dialog next-closeable next-overlay-inner fadeInDown') {
            let btnOK = document.querySelector('button.next-btn.next-btn-primary.next-dialog-btn');
            btnOK.click();
        }
    });
});

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


+ добавить папку img в ней 3 файла:
16.png
48.png
128.png

Рабочее расширение готовое к установке в режиме разработчика. Протестил - удаляет товары из корзины без подтверждения.


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