Пользовательский скрипт для автоматического нажатия кнопки в Gmail

Когда я Ctrl+нажимаю письмо в Gmail, оно открывается в новой вкладке. На этой вкладке есть кнопка "отметить как непрочитанное". Как создать пользовательский скрипт, который автоматически нажимает эту кнопку при открытии вкладки? Я пытаюсь адаптировать похожий скрипт следующим образом:

// ==UserScript==
// @name         Auto-mark email as unread
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  -
// @author       You
// @match        https://mail.google.com/mail/u/0/?ui=2&view=btop&*
// @grant        none
// ==/UserScript==

setTimeout(function() {
    document.querySelector('.bAP').click()
    alert("Hi");
}, 3000);

Сценарий показывает окно предупреждения, но не нажимает кнопку. То же самое с '#bAP'.


person root    schedule 10.08.2019    source источник
comment
К сожалению, вопрос, который вы связали, совершенно неверен. Не может быть, чтобы код, указанный в вопросе, не работал, если код в ответе работал. Но код в ответе ломкий как и все [censored]. Используйте методы: stackoverflow.com/questions/15048223/   -  person Brock Adams    schedule 10.08.2019
comment
Элемент, который вы ищете, не реагирует на события щелчка. Однако у него есть прослушиватели событий mousedown, mouseup и т. Д.   -  person CennoxX    schedule 13.08.2019
comment
@CennoxX Да, это боль от попыток создать пользовательские скрипты для сложного веб-приложения. Ничто больше не действует как обычный HTML-сайт. Щелчки часто прослушиваются на <body> как отдельные действия вверх/вниз и т. д. Нам действительно нужны некоторые инструменты для имитации реального взаимодействия с пользователем в Tampermonkey.   -  person Tomáš Zato - Reinstate Monica    schedule 15.08.2019
comment
ОП, тебе помогло решение в ответе? Это сработало для меня.   -  person Tomáš Zato - Reinstate Monica    schedule 24.08.2019
comment
@Tomáš Поскольку это сработало для вас, а мой селектор неверен, не могли бы вы опубликовать весь код?   -  person root    schedule 07.10.2019
comment
@root Я бы опубликовал его, если бы он у меня когда-либо был. Для примера в ответе я использовал временную переменную из инструментов разработчика.   -  person Tomáš Zato - Reinstate Monica    schedule 07.10.2019


Ответы (1)


Итак, на самом деле это было проще, чем я ожидал, следующий код работает:

const downEvt = new MouseEvent("mousedown");
const upEvt = new MouseEvent("mouseup");
button.dispatchEvent(downEvt);
setTimeout(()=>button.dispatchEvent(upEvt));
person Tomáš Zato - Reinstate Monica    schedule 15.08.2019
comment
Имейте в виду, что селектор в вопросе document.querySelector('.bAP').click() также является ложным. это должно быть что-то вроде document.querySelector('.J-J5-Ji .bvt'). - person CennoxX; 16.08.2019
comment
@CennoxX Я оставил селектор в качестве упражнения для читателя после того, как обнаружил, что на странице используются фреймы, а это означает, что вы должны найти, в каком фрейме есть кнопка. - person Tomáš Zato - Reinstate Monica; 16.08.2019