Я не пользователь WATSUP, но я делаю что-то очень похожее, используя pywinauto - в моем случае я запускаю несколько автоматических тестов, которые открывают различные сторонние программы, которые аналогичным образом выдают неудобные диалоговые окна с предупреждениями , Немного сложно иметь дело с диалогами, о которых вы не знаете, однако, если вы знаете, какие диалоговые окна появляются, но не , когда они появляются , вы можете запустить поток, чтобы иметь дело только с этими всплывающими окнами. , Ниже приведен простой пример из того, что я делаю, и использует pywinauto, но вы можете адаптировать подход для WATSUP:
import time
import threading
class ClearPopupThread(threading.Thread):
def __init__(self, window_name, button_name, quit_event):
threading.Thread.__init__(self)
self.quit_event = quit_event
self.window_name = window_name
self.button_name = button_name
def run(self):
from pywinauto import application, findwindows
while True:
try:
handles = findwindows.find_windows(title=self.window_name)
except findwindows.WindowNotFoundError:
pass #Just do nothing if the pop-up dialog was not found
else: #The window was found, so click the button
for hwnd in handles:
app = application.Application()
app.Connect(handle=hwnd)
popup = app[self.window_name]
button = getattr(popup, self.button_name)
button.Click()
if self.quit_event.is_set():
break
time.sleep(1) #should help reduce cpu load a little for this thread
По сути, этот поток представляет собой просто бесконечный цикл, который ищет всплывающее окно по имени, и если он его находит, он нажимает кнопку, чтобы закрыть окно. Если у вас много всплывающих окон, вы можете открывать один поток на каждое всплывающее окно (хотя эта ошибка не слишком эффективна). Поскольку это бесконечный цикл, у меня есть поток, который ищет, установлено ли событие, чтобы позволить мне остановить поток из моей основной программы. Итак, в основной программе я делаю что-то вроде этого:
#Start the thread
quit_event = threading.Event()
mythread = ClearPopupThread('Window Popup Title', 'Yes button', quit_event)
# ...
# My program does it's thing here
# ...
# When my program is done I need to end the thread
quit_event.set()
Это не обязательно единственный способ справиться с вашей проблемой, но он работает для меня. Извините, я не могу вам сильно помочь с WATSUP (я всегда находил pywinauto немного проще в использовании), но я заметил на домашней странице WATSUP (http://www.tizmoi.net/watsup/intro.html), Пример 2 делает что-то похожее без использования потоков, т.е. ищет названное окно и нажимает определенную кнопку в этом окне.