У каждого есть рабочие задачи, не слишком важные и не сильно-то связанные с профессией, но такие, от которых не отвертишься. Одноразовое выполнение этих задач не составляет большого труда. Однако когда они становятся постоянными и начинают отнимать много времени, их нужно автоматизировать.
Автоматизация этих задач позволит перестать тратить время на рутину. Вы сможете сосредоточиться на действительно важных вещах, что значительно повысит эффективность вашей работы. Кроме того, вы примените на практике все свои знания о Python и даже узнаете что-то новое.
Давайте рассмотрим три проекта Python, которые помогли нам автоматизировать некоторые повседневные задачи на работе и, надеемся, помогут и вам!
1. Автоматизация отчетности в Excel
Подумайте обо всем, что вам нужно сделать для создания отчетов в Excel. Вы используете формулы Excel, создаете сводную таблицу, диаграммы и форматируете рабочие листы.
Сделать это один раз легко, но когда вам приходится делать это с определенной периодичностью, задача усложняется. К счастью, Python может помочь нам автоматизировать такие задачи. В следующий раз для создания отчета в Excel потребуется лишь пара щелчков мышью.
Ваш Первый АВТО-ТЕСТ Selenium + Python / Пишем авто-тесты для начинающих
Подходы к решению
Для автоматизации Excel-отчетов можно использовать openpyxl и Pandas. Подробную инструкцию можно почитать в статье «Автоматизация отчетов в Excel с помощью Python». Обе библиотеки прекрасны и крайне полезны. Но у этого подхода есть недостаток: новичкам может потребоваться некоторое время, чтобы изучить openpyxl. А между тем, эта библиотека пригодится только для работы с Excel.
К счастью, есть более простой подход к автоматизации отчетов в Excel. Нам нужно просто установить библиотеку Python mitosheet (также известную как Mito). Эта библиотека позволяет нам группировать данные и вычислять сводную статистику с помощью интуитивно понятного интерфейса, подобного Excel. Самым приятным будет то, что Mito генерирует код для каждого редактирования. Поэтому мы сможем увидеть код Python, соответствующий каждому редактированию.
В приведенном ниже примере вы можете увидеть, как мы использовали интерфейс mitosheet для создания сводной таблицы. После создания сводной таблицы код создается автоматически. Удобно, не правда ли?
Источник: pythonist.ru
Автоматизация работы с Python
Работу по вводу данных можно разделить на следующие категории:
- Извлечение данных из таблиц (Excel, Google Sheets) и перемещение их в другое место (веб-страница или другая таблица).
- Просмотр данных в интернете (онлайн магазины) или в журналах, сбор данных и файлов (простого текста и изображений) и копирование их в базу данных.
Каким образом можно ускорить этот процесс? В этом нам помогут модули автоматизации Python!
Как устроен Python? ► Детальный разбор
Предварительная подготовка
Документацию и руководство пользователя по модулю PyAutoGUI в Python можно прочитать ЗДЕСЬ. Загрузка модуля выполняется через командную строку:
pip install pyautogui
Чтобы использовать модуль внутри сценария, его нужно импортировать:
import pyautogui as pag
«as pag» используется для ввода меньшего количества символов в следующем коде: pag.click() намного короче, чем pyautogui.click().
Управление клавиатурой
Примечание: инструкции в данном разделе основаны на документации PyAutoGUI и содержат несколько примеров из нее.
typewrite() — самая главная команда для управления клавиатурой. Например:
pag.typewrite(«Hello world!»)
Этот фрагмент кода работает, как при написании «Hello world!» вручную, однако выполняется без нажатия клавиш. Очень удобно!
Чтобы добавить задержку между нажатиями клавиш, можно использовать следующую команду:
pag.typewrite(‘Hello world!’, interval=0.25)
Она печатает каждый символ с интервалом в четверть секунды.
Примечание: с помощью этой функции можно печатать только сообщения. Внутри функции typewrite() невозможно нажать enter или использовать shift.
Список клавиш клавиатуры
Ниже приведен список клавиш клавиатуры, которые можно передать функциям press(), keyUp(), keyDown() или hotkey():
Функции keyDown() и keyUp() имитируют нажатие и отпускание клавиши. Например:
pag.keyDown(«enter»)
pag.keyUp(«enter»)
Этот фрагмент кода нажимает и отпускает клавишу enter. Будьте осторожны и никогда не оставляйте клавишу нажатой
Функция press() объединяет две предыдущих. Клавиша, передаваемая функции, нажата и отпущена:
pag.press(«enter»)
Два предыдущих фрагмента кода выдают одинаковый результат!
Чтобы нажать несколько клавиш, аргументы передаются в виде списка:
pag.press([‘enter’, ‘tab’, ‘enter’])
Последняя функция клавиатуры — это hotkey(), упрощающая использование сочетаний клавиш. Просто передайте ей несколько клавиш, которые будут нажаты по порядку, а затем отпущены в обратном порядке. Например:
pag.hotkey(‘ctrl’, ‘alt’, ‘delete’)
Эквивалентно следующему коду:
pag.keyDown(‘ctrl’) pag.keyDown(‘alt’) pag.keyDown(‘delete’) pag.keyUp(‘delete’) pag.keyUp(‘alt’) pag.keyUp(‘ctrl’)
Управление мышью
Места расположения мыши на экране обозначены координатами X и Y: X начинается с 0 с левой стороны и увеличивается вправо, а Y начинается с 0 в верхней части экрана и увеличивается с понижением.
0,0 X increases —> +—————————+ | | Y increases | | | | 1920 x 1080 screen | | | | V | | | | +—————————+ 1919, 1079
Чтобы узнать размер экрана, используйте функцию size:
pag.size()
Она возвращает кортеж, например (1920×1080), обозначающий разрешение экрана.
Список других функций мыши:
pag.moveTo(600, 600) # перемещение мыши на X 600, Y 600 pag.moveTo(100, 200, 2) # перемещение мыши на X 100, Y 200 в течение 2 секунд pag.move(0, 50) # перемещение мыши на 50 пикселей относительно ее предыдущего расположения pag.dragTo(100, 200, button=’left’) # перемещение мыши на X 100, Y 200 с удержанием левой кнопки pag.dragTo(300, 400, 2, button=’left’) # перемещение мыши на X 300, Y 400 в течение 2 секунд с удержанием левой кнопки pag.click() # щелчок мыши pag.click(x=100, y=200) # перемещение на 100, 200, а затем нажатие левой кнопкой pag.click(button=’right’) # щелчок правой кнопкой мыши pag.doubleClick() # двойной щелчок левой кнопкой pag.click(clicks=2) # двойной щелчок левой кнопкой мыши pag.click(clicks=2, interval=0.25) # двойной щелчок левой кнопкой мыши с паузой в четверть секунды между щелчками pag.scroll(10) # прокрутка на 10 «кликов» вверх pag.scroll(-10) # прокрутка на 10 «кликов» вниз pag.hscroll(10) # прокрутка на 10 «кликов» вправо pag.hscroll(-10) # прокрутка на 10 «кликов» влево
Более подробную информацию можно найти ЗДЕСЬ или ЗДЕСЬ.
Применение на практике
Предположим, что вы руководите большой компанией и хотите, чтобы весь 1 000 000 сотрудников были зарегистрированы на популярном веб-сайте. Первый способ — выполнить это вручную. Если для регистрации одного пользователя требуется 30 секунд, а работа будет выполняться 24 часа в сутки, то этот процесс займет более 347 дней. Достаточно долго.
Вместо этого можно потратить несколько часов на написание программы и предоставить выполнение работы компьютерам. Приступим!
Допустим, вы уже определили список адресов электронной почты всех сотрудников:
emails = [«[email protected]», «[email protected]», «[email protected]», «[email protected]», «[email protected]», «[email protected]», . ]
Приступим к созданию кода. Он начинается с импортов и открытия платформы crazycoolwebsite.
import pyautogui as pag import webbrowser webbrowser.open_new(«crazycoolwebsite.com»)
Затем нужно добавить код для навигации по процессу регистрации. Предположим, что он выглядит следующим образом:
- Главная страница -> нажатие «Get started»
- Всплывающее окно -> нажатие «Sign up with email»
- Окно ввода электронной почты -> ввод адреса электронной почты и нажатие Enter
- Готово! Закройте окно, а пользователь получит дальнейшие инструкции на электронную почту.
В коде это выглядит так:
import pyautogui as pag import webbrowser emails = [«[email protected]», «[email protected]», «[email protected]», «[email protected]», «[email protected]», «[email protected]», . ] for email in emails: webbrowser.open_new(«crazycoolwebsite.com») pag.click(x=xcoord1, y=ycoord1) #Get started pag.click(x=xcoord2, y=ycoord2) #Sign up with email pag.typewrite(email) #Type your email pag.press(«enter») pag.hotkey(‘ctrl’, ‘w’) #closes current tab
Вот и все! Если указаны точные координаты нажатия (xcoord1, ycoord1, xcoord2 и ycoord2), то код сделает свое дело. Не советуем использовать этот метод как способ рассылки спама.
Примечание: при автоматизации следует учитывать временной фактор. Вы не можете предсказать, сколько времени займет открытие файла или загрузка веб-страницы. Найдите безопасные интервалы для «приостановки кода» или реализации функций, которые определяют, загружена ли страница (PyAutoGUI проверяет, является ли определенное количество пикселей белым (страница все еще загружается) или обозначено другим цветом (страница загружена!).
Немного о работе по вводу данных в целом: большинство заданий не так просты, как в описанном выше примере, однако процесс извлечения данных из A и вставки их в B остается практически неизменным. Различаются только структуры данных и ресурсы.
Добавим немного воображения
Этот модуль можно использовать и во многих других случаях. Например, в некоторых компьютерных играх крайне важна точность. Сможете ли вы перетащить мышь или нажать клавишу пробела более точно, чем написанный сценарий?
Игра Scary maze
Цель игры Scary maze состоит в том, чтобы перемещать курсор по синему пути. При соприкосновении с черным пикселем вы возвращаетесь к началу.
Заключительная часть с узким коридором, конечно, самая сложная. А что, если создать сценарий python для завершения лабиринта?
Игра Google Dino
Другой пример: помните этого парня?
Он, вероятно,самый нелюбимый друг всех пользователей Chrome, поскольку он приходит в гости лишь при отсутствии интернета. Попробовать игру можно ЗДЕСЬ. Цель состоит в обходе препятствий, приближающихся к Dino.
Сделайте несколько скриншотов игрового экрана и проанализируйте следующее:
- С какой скоростью движется препятствие?
- На какой высоте оно находится?
- Событие происходит днем или ночью? Примечание: пиксели чередуются между черным и белымцветами.
- Сколько препятствий отображается в данный момент?
- Где должно находиться препятствие для запуска команды прыжка/уклонения?
На этом изображении препятствия обозначены красными прямоугольниками. Dino должен прыгнуть, когда красная коробка коснется зеленой линии.
Отсрочка отправки текста
Сталкивались ли вы с такой ситуацией, когда, закончив писать письмо/сообщение в 3 часа ночи, вы не знаете, отправлять ли его сейчас или подождать до утра, чтобы избежать таких вопросов, как «почему вы не спите ночью, как нормальные люди?» Есть простое решение:
import pyautogui as pag import time time.sleep(21600) # эквивалентно шести часам pag.press(«enter»)
Этот сценарий откладывает отправку сообщения на 6 часов (время задержки можно изменить).
- Как создавать веб-сокеты в Python
- Элегантное ООП в Python
- Пишем интерфейсы командной строки в Python как профи
Источник: nuancesprog.ru
Telegram-бот на Python за полчаса с aiogram
Напишем простой диалоговый Telegram-бот на Python, который в дальнейшем можно дополнить различными функциями, и задеплоим его.
Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.
Настройка
- свой токен;
- адрес Telegram API (https://api.telegram.org/bot);
- ссылку на документацию.
Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.
Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ, например в GitHub-репозиторий .
Далее начните беседу. Введите в поисковой строке имя бота и нажмите /start . Отправьте любое сообщение: оно станет первым обновлением, которое получит Телеграм бот.
Установка Python
Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия важна. Нам подойдет Python не ниже версии 3.7. Если же у вас Linux или macOS, то, скорее всего, у вас стоит Python 3.6.
Как обновиться, можете почитать здесь.
Тем, кто только начал изучение этого языка, будет также полезна дорожная карта Python-разработчика.
Установка pip
Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip —version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:
$ sudo apt-get install python-pip
Установка aiogram
Установить данный фреймворк для Telegram Bot API с помощью pip:
pip install aiogram
Hello, bot!
Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеки и создать экземпляры Телеграм бота и диспетчера:
from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.utils import executor TOKEN = «ваш токен от бота здесь» bot = Bot(token=TOKEN) dp = Dispatcher(bot)
Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help :
Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:
Запускаем Telegram бота, написанного на Python, следующим образом:
if __name__ == ‘__main__’: executor.start_polling(dp)
Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.
Программист-разработчик Python АО «Гринатом» , , можно удалённо , По итогам собеседования
Ну вот и всё, простенький бот в Телеграмме на языке Python готов.
Docker
Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:
FROM python:3.8 # set work directory WORKDIR /usr/src/app/ # copy project COPY . /usr/src/app/ # install dependencies RUN pip install —user aiogram # run app CMD [«python», «bot.py»]
Каталог проекта должны при этом содержать следующие файлы:
Для локальных тестов достаточно установить Docker (linux, mac, windows), после чего в папке проекта собрать и запустить контейнер с помощью команд:
docker build -t my_app docker run -d my_app
my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.
-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.
Деплой на AWS
Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:
- Локально или с помощью пайплайнов собрали контейнер.
- Загрузили его на докер хаб.
- В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
- Запустили.
Пройдёмся по этим шагам. Везде, где указано , надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.
docker build -t /my_app
Загружаем его на докерхаб:
docker push /my_app
Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:
docker run -d /my_app
Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом.
Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.
- Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:
- Называем приложение, теги оставляем пустыми:
- Создаём для приложения environment:
- Выбираем Worker environment:
- В качестве платформы выбираем Docker:
- В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:
Dockerrun.aws.json < «AWSEBDockerrunVersion»: «1», «Image»: < «Name»: «/my_app», «Update»: «true» >, «Ports»: [ < «ContainerPort»: 5000, «HostPort»: 8000 >] >
- Создаём окружение:
- AWS начинает создавать окружение, просто ждём завершения процесса:
- Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:
Проверяем работу нашего Telegram bot:
Заключение
Поздравляем! Теперь вы знаете, как писать роботов для Telegram на Python.
Бота можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.
Кстати, в телеграмме есть аж целых два типа клавиатур:
- Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
- Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:
Но и это полностью рабочий Телеграм-бот на Python: дополните словарём, и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.
В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.
Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.
Источник: tproger.ru