Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Automação de Sistemas e Processos com Python\n", "\n", "### Desafio:\n", "\n", "Todos os dias, o nosso sistema atualiza as vendas do dia anterior.\n", "O seu trabalho diário, como analista, é enviar um e-mail para a diretoria, assim que começar a trabalhar, com o faturamento e a quantidade de produtos vendidos no dia anterior\n", "\n", "E-mail da diretoria: seugmail+diretoria@gmail.com<br>\n", "Local onde o sistema disponibiliza as vendas do dia anterior: https://drive.google.com/drive/folders/1mhXZ3JPAnekXP_4vX7Z_sJj35VWqayaR?usp=sharing\n", "\n", "Para resolver isso, vamos usar o pyautogui, uma biblioteca de automação de comandos do mouse e do teclado\n", "\n", "### Passo 1: Lógica de Programação\n", "\n", "### Passo 2: Transformar o passo a passo em Python" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# instalar pyautogui\n", "\n", "import pyautogui\n", "import time\n", "import pyperclip\n", "\n", "pyautogui.PAUSE = 1\n", "pyautogui.alert(\"Vai começar, aperte OK e não mexa em nada\")\n", "\n", "# opção 1 - abrir navegador novo e entrar no chrome\n", "# pyautogui.press(\"winleft\")\n", "# pyautogui.write(\"chrome\")\n", "# pyautogui.press(\"enter\")\n", "\n", "# opção 2 - abrir uma nova aba\n", "pyautogui.hotkey('ctrl', 't')\n", "\n", "# abrir drive\n", "# ensinar aqui o write\n", "link = \"https://drive.google.com/drive/folders/149xknr9JvrlEnhNWO49zPcw0PW5icxga?usp=sharing\"\n", "pyperclip.copy(link)\n", "pyautogui.hotkey(\"ctrl\", \"v\")\n", "pyautogui.press(\"enter\")\n", "time.sleep(7)\n", "\n", "# baixar base de dados atualizada\n", "pyautogui.click(414, 271, clicks=2)\n", "time.sleep(2)\n", "pyautogui.click(407, 353)\n", "pyautogui.click(1163, 153)\n", "pyautogui.click(1052, 599)\n", "time.sleep(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vamos agora ler o arquivo baixado para pegar os indicadores\n", "\n", "- Faturamento\n", "- Quantidade de Produtos" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", " vertical-align: middle;\n", " }\n", "\n", " .dataframe tbody tr th {\n", " vertical-align: top;\n", " }\n", "\n", " .dataframe thead th {\n", " text-align: right;\n", " }\n", "</style>\n", "<table border=\"1\" class=\"dataframe\">\n", " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", " <th>Código Venda</th>\n", " <th>Data</th>\n", " <th>ID Loja</th>\n", " <th>Produto</th>\n", " <th>Quantidade</th>\n", " <th>Valor Unitário</th>\n", " <th>Valor Final</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>65014</td>\n", " <td>2019-12-01</td>\n", " <td>Shopping Morumbi</td>\n", " <td>Sunga Listrado</td>\n", " <td>5</td>\n", " <td>114</td>\n", " <td>570</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>65014</td>\n", " <td>2019-12-01</td>\n", " <td>Shopping Morumbi</td>\n", " <td>Casaco Listrado</td>\n", " <td>1</td>\n", " <td>269</td>\n", " <td>269</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>65016</td>\n", " <td>2019-12-01</td>\n", " <td>Iguatemi Campinas</td>\n", " <td>Sapato Listrado</td>\n", " <td>2</td>\n", " <td>363</td>\n", " <td>726</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>65016</td>\n", " <td>2019-12-01</td>\n", " <td>Iguatemi Campinas</td>\n", " <td>Casaco</td>\n", " <td>1</td>\n", " <td>250</td>\n", " <td>250</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>65017</td>\n", " <td>2019-12-01</td>\n", " <td>Shopping SP Market</td>\n", " <td>Gorro Liso</td>\n", " <td>3</td>\n", " <td>92</td>\n", " <td>276</td>\n", " </tr>\n", " <tr>\n", " <th>...</th>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " <td>...</td>\n", " </tr>\n", " <tr>\n", " <th>7084</th>\n", " <td>69996</td>\n", " <td>2019-12-26</td>\n", " <td>Center Shopping Uberlândia</td>\n", " <td>Short Listrado</td>\n", " <td>2</td>\n", " <td>102</td>\n", " <td>204</td>\n", " </tr>\n", " <tr>\n", " <th>7085</th>\n", " <td>69996</td>\n", " <td>2019-12-26</td>\n", " <td>Center Shopping Uberlândia</td>\n", " <td>Mochila</td>\n", " <td>4</td>\n", " <td>270</td>\n", " <td>1080</td>\n", " </tr>\n", " <tr>\n", " <th>7086</th>\n", " <td>69996</td>\n", " <td>2019-12-26</td>\n", " <td>Center Shopping Uberlândia</td>\n", " <td>Pulseira Estampa</td>\n", " <td>1</td>\n", " <td>87</td>\n", " <td>87</td>\n", " </tr>\n", " <tr>\n", " <th>7087</th>\n", " <td>69997</td>\n", " <td>2019-12-26</td>\n", " <td>Ribeirão Shopping</td>\n", " <td>Camisa Listrado</td>\n", " <td>1</td>\n", " <td>108</td>\n", " <td>108</td>\n", " </tr>\n", " <tr>\n", " <th>7088</th>\n", " <td>69997</td>\n", " <td>2019-12-26</td>\n", " <td>Ribeirão Shopping</td>\n", " <td>Short Linho</td>\n", " <td>2</td>\n", " <td>133</td>\n", " <td>266</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>7089 rows × 7 columns</p>\n", "</div>" ], "text/plain": [ " Código Venda Data ID Loja Produto \\\n", "0 65014 2019-12-01 Shopping Morumbi Sunga Listrado \n", "1 65014 2019-12-01 Shopping Morumbi Casaco Listrado \n", "2 65016 2019-12-01 Iguatemi Campinas Sapato Listrado \n", "3 65016 2019-12-01 Iguatemi Campinas Casaco \n", "4 65017 2019-12-01 Shopping SP Market Gorro Liso \n", "... ... ... ... ... \n", "7084 69996 2019-12-26 Center Shopping Uberlândia Short Listrado \n", "7085 69996 2019-12-26 Center Shopping Uberlândia Mochila \n", "7086 69996 2019-12-26 Center Shopping Uberlândia Pulseira Estampa \n", "7087 69997 2019-12-26 Ribeirão Shopping Camisa Listrado \n", "7088 69997 2019-12-26 Ribeirão Shopping Short Linho \n", "\n", " Quantidade Valor Unitário Valor Final \n", "0 5 114 570 \n", "1 1 269 269 \n", "2 2 363 726 \n", "3 1 250 250 \n", "4 3 92 276 \n", "... ... ... ... \n", "7084 2 102 204 \n", "7085 4 270 1080 \n", "7086 1 87 87 \n", "7087 1 108 108 \n", "7088 2 133 266 \n", "\n", "[7089 rows x 7 columns]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "\n", "df = pd.read_excel(\"C://Users/alonp/Downloads/Vendas - Dez.xlsx\")\n", "display(df)\n", "faturamento = df['Valor Final'].sum()\n", "qtde_produtos = df['Quantidade'].sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vamos agora enviar um e-mail pelo gmail" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'OK'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pyperclip\n", "\n", "# abrir aba gmail\n", "pyautogui.hotkey('ctrl', 't')\n", "pyautogui.write(\"mail.google.com\")\n", "pyautogui.press('enter')\n", "time.sleep(5)\n", "\n", "# clicar em escrever email\n", "pyautogui.click(133, 183)\n", "\n", "# preencher informações do e-mail\n", "pyautogui.write('pythonimpressionador+diretoria@gmail.com')\n", "pyautogui.press('tab')\n", "pyautogui.press('tab')\n", "assunto = \"Relatório de Vendas de Ontem\"\n", "pyperclip.copy(assunto)\n", "pyautogui.hotkey(\"ctrl\", 'v')\n", "pyautogui.press(\"tab\")\n", "texto = f\"\"\"\n", "Prezados, bom dia\n", "\n", "O faturamento de ontem foi de: R${faturamento:,.2f}\n", "A quantidade de produtos foi de: {qtde_produtos:,}\n", "\n", "Abs\n", "LiraPython\"\"\"\n", "pyperclip.copy(texto)\n", "pyautogui.hotkey(\"ctrl\", 'v')\n", "\n", "# enviar e-mail\n", "pyautogui.hotkey('ctrl', 'enter')\n", "\n", "# avisar que acabou\n", "pyautogui.alert(\"Fim da Automação. Seu computador já voltou a ser seu\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Use esse código para descobrir qual a posição de um item que queira clicar\n", "\n", "- Lembre-se: a posição na sua tela é diferente da posição na minha tela" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point(x=407, y=353)\n" ] }, { "data": { "text/plain": [ "'OK'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pyautogui\n", "import time\n", "time.sleep(4)\n", "print(pyautogui.position())\n", "pyautogui.alert(\"Posição Registrada\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Caso queira pegar por uma imagem" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "time.sleep(5)\n", "x, y = pyautogui.locateCenterOnScreen(\"gmail.png\")\n", "pyautogui.click(x, y)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Achei\n" ] } ], "source": [ "while not pyautogui.locateCenterOnScreen(\"gmail.png\"):\n", " time.sleep(1)\n", "print(\"Achei\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }
Compartilhar