Здравствуйте, это моя самая первая история, и я хочу рассказать вам, как вы можете автоматизировать бесконечные карантинные встречи, используя python 3, pyautogui, google meet a̶n̶d̶ ̶p̶r̶o̶g̶r̶a̶m̶m̶i̶n̶g̶ ̶a̶n̶t̶i̶p̶a̶t̶t̶e̶r̶n̶s. Решил рассказать об этом, потому что пишу коммерческий код более 1 года и не знаю о такой полезной вещи, как автоматизация графического интерфейса для скучных задач (к тому же я чувствую себя счастливым после ее внедрения).

Я нахожу среду прокрутки библиотеки pyautogui и хочу

  • начать встречу в Google
  • скопировать URL встречи
  • открыть телеграмму (отправить ее друзьям: D)

Давайте начнем !

Я пытаюсь автоматизировать начало собрания Google таким странным способом, потому что у него нет общедоступного API.

Шаг 1. Фундамент.

Все, что вам нужно, это Ubuntu 20.04 и интернет :). Сначала нам нужно создать наш проект, создать для него virtualenv и активировать его.

mkdir google_meet_quick_start
cd google_meet_quick_start
virtualenv env
source env/bin/activate

Затем нам нужно установить pyautogui.

pip install pyautogui

И пакеты с иглами для этого.

sudo apt-get install scrot
sudo apt-get install python3-tk
sudo apt-get install python3-dev

Шаг 2. Помощник

Создайте скрипт, который поможет нам отслеживать текущее положение мыши.

nano mouse_cursor_postion.py

И вставьте в него этот код.

import pyautogui, sys

print("Press Ctrl-C to quit.")
try:
    while True:
        x, y = pyautogui.position()
        positionStr = "X: " + str(x).rjust(4) + " Y: " + str(y).rjust(4)
        print(positionStr, end="")
        print("\b" * len(positionStr), end="", flush=True)
except KeyboardInterrupt:
    print("\n")

Запускаем скрипт.

python mouse_cursor_postion.py

Вы можете видеть координаты курсора.

Теперь можно найти координаты игольчатых элементов графического интерфейса.

Шаг 3. Пяутогуй пора!

Создайте еще одно окно терминала и файл для сценария.

nano start_meeting.py

Вставьте код ниже в файл.

import pyautogui as pag 
# We are trying to save some time so type pag is better than #pyautogui :D


# You can stop execution if your mouse will jump to top side of #monitor
pag.FAILSAFE = True
# Coordinates of GUI element (was find using mouse_cursor_postion.py)
CHROME_IN_APP_PANEL = {"x": 27, "y": 743}
CHROME_SEARCH_BAR = {"x": 420, "y": 80}
GOOGLE_MEET_CREATE_MEETING_URL = "https://meet.google.com/new\n"

GOOGLE_MEET_DISABLE_CAMERA = {"x": 483, "y": 639}
GOOGLE_MEET_CONNECT = {"x": 1051, "y": 475}
GOOGLE_MEET_COPY_LINK = {"x": 698, "y": 415}

TELEGRAM_IN_APP_PANEL = {"x": 107, "y": 739}
# Implement clicks to needle elements
pag.click(clicks=1, button="left", **CHROME_IN_APP_PANEL)
# Sometimes we need to set delays to give time for page to load
pag.moveTo(duration=0, **CHROME_SEARCH_BAR)
pag.click(clicks=1, button="left")
# "\n" - emulates enter pressing
pag.typewrite(GOOGLE_MEET_CREATE_MEETING_URL, interval=0)

pag.moveTo(duration=7, **GOOGLE_MEET_DISABLE_CAMERA)
pag.click(clicks=1, button="left")

pag.moveTo(duration=1, **GOOGLE_MEET_CONNECT)
pag.click(clicks=1, button="left")

pag.moveTo(duration=3, **GOOGLE_MEET_COPY_LINK)
pag.click(clicks=1, button="left")
# I need to open telegram to send meeting link to my friends
pag.moveTo(duration=0, **TELEGRAM_IN_APP_PANEL)
pag.click(clicks=1, button="left")

Как видите, я использую именованные словари для координат элементов графического интерфейса, чтобы код был более читабельным и не нарушал одно из старейших правил программирования - магические числа.

Термин магическое число или магическая константа относится к анти-шаблону использования чисел непосредственно в исходном коде. Это было названо нарушением одного из старейших правил программирования, восходящего к руководствам по COBOL, FORTRAN и PL / 1 1960-х годов.

Шаг 4. Проверьте свою удачу

У меня для вас плохие новости, если размер вашего монитора не 1366x768 пикселей - вам нужно установить координаты самостоятельно, используя скрипт mouse_cursor_postion.py: D.

Шаг 5. Начните встречу

Когда все будет хорошо, вы можете запустить скрипт и попробовать заполнить свободные 10 секунд до начала встречи.

python start_meeting.py

Удачи и счастья!

Картинка кота для привлечения внимания :)