Как прогуливать встречи в Zoom с помощью Python
Всем привет, я — Денис, Product Manager в банке, а до этого перезапускал вебинарную платформу VirtualRoom.
Сегодня я расскажу про свой скрипт, который отмечал меня на лекциях в аспирантуре мехмата МГУ.
Полную версию можно посмотреть на youtube
А тут вкратце пройдемся по коду.
Нафига?
Лень ходить на пары, встречи в Zoom и отмечаться.
Удивительно, но это применимо не только для университетов, но и для больших компаний, где надо отмечаться на встречах. Прикиньте такие есть…
Что делает код?
входит в указанное мероприятие
ждет сигнала, что надо отметиться
отправляет сообщение в чат
Код
Как всегда начинаем с загрузки библиотек
import subprocess
import pyautogui
import time
import pandas as pd
from datetime import datetime
В основном такие скрипты я пишу с помощью библиотеки selenium.
Почему selenium делает вас всемогущим и полностью окупает трудозатраты, я расскажу в следующий раз.
Так вот, когда я начал писать код, я думал, что сделаю всё через любимый selenium.
Но верстка Zoom никак не хотела открывать мне панель чата. Даже используя библиотеку, имитирующую наведение мыши, у меня ничего не вышло.
Поэтому после стадии принятия, в 2 часа ночи я наткнулся на видео одного индуса, где он с помощью библиотеки pyautogui успешно входит в зум.
Вход в мероприятие
def sign_in(meetingid, pswd):
subprocess.call('C:\\Users\Daria\AppData\Roaming\Zoom\bin\Zoom.exe')
#здесь мы просто открыли зум
time.sleep(10)
#ждем пока откроется
#нажатие на кнопку Присоединиться к мероприятию
join_btn = pyautogui.locateCenterOnScreen('join_button.png')
pyautogui.moveTo(join_btn)
pyautogui.click()
# вводим номер мероприятия
meeting_id_btn = pyautogui.locateCenterOnScreen('meeting_id_button.png')
pyautogui.moveTo(meeting_id_btn)
pyautogui.click()
pyautogui.write(meetingid)
#тыкаем на чекбоксы выключить камеру и микрофон
media_btn = pyautogui.locateAllOnScreen('media_btn.png')
for btn in media_btn:
pyautogui.moveTo(btn)
pyautogui.click()
time.sleep(2)
#нажимаем на кноку Войти
join_btn = pyautogui.locateCenterOnScreen('join_btn.png')
pyautogui.moveTo(join_btn)
pyautogui.click()
time.sleep(5)
#вводим пароль мероприятия
meeting_pswd_btn = pyautogui.locateCenterOnScreen('meeting_pswd.png')
pyautogui.moveTo(meeting_pswd_btn)
pyautogui.click()
pyautogui.write(pswd)
pyautogui.press('enter')
Что тут произошло? или как работает библиотека pyautogui
meeting_pswd_btn = pyautogui.locateCenterOnScreen('meeting_pswd.png')
pyautogui.moveTo(meeting_pswd_btn)
pyautogui.click()
pyautogui.write(pswd)
pyautogui.press('enter')
Говорим питону: «слышь, найди мне на экране картинку как ту, что я тебе передал, и скажи мне координаты её центра»
join_button.png«перенеси мышь в координаты, которые я просил выше»
«кликни»
«введи текстовое значение, которое я тебе передал»
«жмякни клавишу Enter, большую такую»
Афигенная библиотека, не правда ли?
time.sleep(18)
#ждем пока мы войдем в мероприятие
#дальше будет примитивная проверка, что отобразилось окно для Присоединиться с камепрй
f=2
while f==2:
join_with_micro = pyautogui.locateCenterOnScreen('join_with_micro.png')
if wind_micro==join_with_micro:
f=3
pyautogui.moveTo(join_with_micro)
pyautogui.click()
time.sleep(3)
#разворачиваем окно зума на весь экран и выключаем микрофон
pyautogui.hotkey('alt','f')
time.sleep(3)
pyautogui.hotkey('alt','a')
Отлично, мы успешно вошли в мероприятие.
Ждем сигнала и отмечаемся
В моем случае сигналом к тому, что сейчас надо отмечаться на лекции, было резкое увеличение количества сообщений в чате.
Каждому аспиранту надо было написать в чат ФИО и факультет, из-за чего количество непрочитанных сообщений быстро росло.
Как только оно достигало 23 ИЛИ 24 ИЛИ 33 шт, то запускалась часть для отправки сообщения в чат.
time.sleep(10)
#примитивный бесконечный цикл
h=1
while h==1:
#проверяем есть ли на экране картинка кнопки чата с 23 напрочитанными сообщениями
chat4=pyautogui.locateCenterOnScreen('chat23.png')
chat5=pyautogui.locateCenterOnScreen('chat24.png')
chat6=pyautogui.locateCenterOnScreen('chat33.png')
if(chat4==chat23):
pyautogui.moveTo(chat4)
pyautogui.click()
h=2
elif(chat5==chat24):
pyautogui.moveTo(chat5)
pyautogui.click()
h=2
elif(chat6==chat33):
pyautogui.moveTo(chat6)
pyautogui.click()
h=2
#указываем текст, который надо отправить в чате
#к сожалению, русский не поддерживается, поэтому пишем русский текст англиской расскадкрй
m2='Fynjy Gneirby Vt[ vfn]'
time.sleep(7)
#ищем поля для ввода сообщения в чате
to_msg = pyautogui.locateCenterOnScreen('to_msg.png')
pyautogui.moveTo(to_msg)
pyautogui.click()
#меняем раскадку, чтобы писать русский текст
pyautogui.hotkey('ctrl','shift')
#вводим ранее заданный текст
pyautogui.typewrite(m2)
time.sleep(1)
#отправляем сообщение в чат
pyautogui.press('enter')
Поздравляю шалость удалась, не прошло и 2х ночей.
примерно так я выглядел под утро, написав за ночь этот скрипт
Пошаговая инструкция и код
https://dsmatveev.notion.site/13bbe3c1d5e9437f9d08c4e941d73fda
Спасибо всем, кто дочитал до конца, надеюсь, эта информация будет вам полезна.
Хотел добавить, что это мой первый пост, я далеко не программист и пишу неоптимальный код. Мне важно, чтобы время потраченное на написание кода, как можно быстрее себя окупало, как бы коряво он не был написан.
Кстати, в https://t.me/msu2product недавно был небольшой пост про мой новый скрипт Notion+VK+Speech2text