Как прогуливать встречи в 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')
  1. Говорим питону: «слышь, найди мне на экране картинку как ту, что я тебе передал, и скажи мне координаты её центра»

    join_button.png
    join_button.png
  2. «перенеси мышь в координаты, которые я просил выше»

  3. «кликни»

  4. «введи текстовое значение, которое я тебе передал»

  5. «жмякни клавишу 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


ссылка на оригинал статьи https://habr.com/ru/articles/593483/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *