Задать вопрос
@thoreq

Перехват web уведомлений которые приходят в Windows?

Поставил пуш уведомления от x.com себе в Chrome и они приходят в Центр Уведомлений.
Не могу никак разобраться как мне парсить содержимое уведомления сразу как оно приходит и отправлять текст уведомления себе на сервер, на свой ендпоинт.
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
prerequisite: python 3.9 и winrt

spoiler
import asyncio
from winrt.windows.ui.notifications.management import UserNotificationListener
from winrt.windows.ui.notifications import KnownNotificationBindings

async def notification_handler(listener, seen_notifications):
    print("Слушатель уведомлений запущен. Ожидание новых уведомлений...")

    # Бесконечно слушаем уведомления
    while True:
        try:
            # Получение всех текущих уведомлений
            notifications = await listener.get_notifications_async(0)

            for notification in notifications:
                notification_id = notification.id  # Получаем уникальный ID уведомления

                # Проверяем, было ли это уведомление уже обработано
                if notification_id not in seen_notifications:
                    seen_notifications.add(notification_id)  # Добавляем ID в множество обработанных уведомлений

                    try:
                        # Получение информации об уведомлении
                        app_name = notification.app_info.display_info.display_name
                        binding = notification.notification.visual.get_binding(KnownNotificationBindings.get_toast_generic())
                        if binding:
                            text_elements = binding.get_text_elements()
                            title = text_elements[0].text if len(text_elements) > 0 else "Без заголовка"
                            body = text_elements[1].text if len(text_elements) > 1 else "Без текста"
                            print(f"Новое уведомление!")
                            print(f"Приложение: {app_name}")
                            print(f"Заголовок: {title}")
                            print(f"Текст: {body}")
                            print("-" * 50)

                           # Проверяем что ув. от нужного приложения и делаем всякое нужное с ним.

                    except Exception as e:
                        print(f"Ошибка при обработке уведомления: {e}")

            # Задержка перед следующим циклом
            await asyncio.sleep(1)

        except Exception as e:
            print(f"Ошибка при получении уведомлений: {e}")
            await asyncio.sleep(5)  # Задержка перед повторной попыткой в случае ошибки

async def main():
    # Получение текущего слушателя уведомлений
    listener = UserNotificationListener.get_current()

    # Смотрим есть ли разрешение на доступ к уведомлениям. Если нет, лезем в настройки уведомлений.
    access_status = await listener.request_access_async()
    if access_status != 1:
        print("Нет разрешения на доступ к уведомлениям. Проверьте настройки конфиденциальности.")
        return

    seen_notifications = set()  # Множество для хранения ID уже обработанных уведомлений
    await notification_handler(listener, seen_notifications)

if __name__ == "__main__":
    asyncio.run(main())

67590b9765568892633574.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ZERGeich
@ZERGeich
Есть вероятность, что вам нужно копать куда-то сюда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы