<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maurício Silva</title>
    <description>The latest articles on DEV Community by Maurício Silva (@codigo100cera).</description>
    <link>https://dev.to/codigo100cera</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F556901%2Fbd2c26e2-6ff0-46df-b1df-d44d2e3f1705.png</url>
      <title>DEV Community: Maurício Silva</title>
      <link>https://dev.to/codigo100cera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codigo100cera"/>
    <language>en</language>
    <item>
      <title>Democratizando a Automação de Processos Robóticos com Python — RPA.</title>
      <dc:creator>Maurício Silva</dc:creator>
      <pubDate>Sun, 07 Feb 2021 15:37:17 +0000</pubDate>
      <link>https://dev.to/codigo100cera/democratizando-a-automacao-de-processos-roboticos-com-python-rpa-3a8b</link>
      <guid>https://dev.to/codigo100cera/democratizando-a-automacao-de-processos-roboticos-com-python-rpa-3a8b</guid>
      <description>&lt;p&gt;&lt;a href="https://dev.to/codigo100cera"&gt;Dev.To&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/mcsilva-csc/"&gt;Linkedin&lt;/a&gt; | &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber"&gt;Youtube&lt;/a&gt; | &lt;a href="https://t.me/joinchat/C_ECNVWoSae_ebzcjfM33w"&gt;Telegram&lt;/a&gt; | &lt;a href="https://medium.com/@codigo100cera"&gt;Medium&lt;/a&gt; | &lt;a href="https://www.twitch.tv/codigo100cera"&gt;Twitch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcBnot7d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0y0k5kiyxyp5mhn2y18x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZcBnot7d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0y0k5kiyxyp5mhn2y18x.png" alt="Alt Text" width="739" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sempre achei incrível a quantidade de coisas que são possíveis fazer com a programação, mas dentre essas possibilidades sempre tive um olhar muito atento para a integração e automação de processos, além do mais, a maioria dos projetos de software são criados com essa finalidade, que é basicamente o seu valor central.&lt;/p&gt;

&lt;p&gt;A ideia de muitas empresas era ter a possibilidade de executar todos os seus processos de negócio por meio de um único sistema de software. O que na verdade já foi tentado por algumas, podemos usar como exemplo o SAP, que na década 1990 tentou ser esse produto de automação e integração, e apesar de ser utilizado por muitas empresas, atingiu apenas em parte este objetivo, porque todas as empresas que fazem uso do SAP também utilizam dezenas ou até mesmo centenas de outras aplicações em seus processos de negócio.&lt;/p&gt;

&lt;p&gt;Dentro desse cenário de granularização dos processos de negócio, que são divididos em várias tarefas e executados em diversos sistemas de software, a responsabilidade pela integração das partes separadas passa a ser dos usuários, que precisam realizar procedimentos e rotinas repetitivas para manterem a integração entre eles, com o prejuízo imediato da automação. Os profissionais da gestão por processos ao ouvirem algo deste tipo ficam assustados, porque sabem que se um determinado processo precisa de alguma rotina ou procedimento para ser executado, com certeza esse processo falhará em algum momento, podendo causar enormes prejuízos para a empresa.&lt;/p&gt;

&lt;p&gt;Neste contexto caótico, de tarefas realizadas manualmente e de rotinas repetitivas, devido a utilização de alguns sistemas legados, falta de APIs (Application Public Interfaces) ou por qualquer outro motivo, surgiu a RPA(Robotic Process Automation) como uma alternativa de automação dessas pontas soltas.&lt;/p&gt;

&lt;p&gt;A RPA não pode ser vista como uma solução definitiva, isto é, não resolve todos os problemas de forma permanente, mas pode ser uma grande aliada, resolvendo boa parte deles com eficiência em um curto prazo de tempo. &lt;/p&gt;

&lt;p&gt;Ela tem sido amplamente adotada por muitas empresas, mas devido ao alto custo das licenças proprietárias para aquisição e a imposição de restrições das licenças das versões da comunidade, muitas empresas, públicas ou privadas, são impedidas de se beneficiarem desta tecnologia.&lt;/p&gt;

&lt;p&gt;Impulsionado pela necessidade real da empresa em que trabalhei, resolvi procurar por uma solução viável em meio aos muitos softwares opensource. Encontrei algumas soluções interessantes, porém em alguns pontos não eram tão eficientes, resolvi pesquisar a fundo a linguagem python, por ser uma liguagem madura com mais de 20 anos no mercado, e ter uma ampla quantidade de bibliotecas para automação, em resumo, a conclusão que cheguei foi que, se você pensar em automatizar alguma coisa, com certeza alguém já criou uma biblioteca em python para isso, assim foi escolhida a linguagem.&lt;/p&gt;

&lt;p&gt;Estudei as bibliotecas e efetuei a implementação da automação que precisávamos na empresa, era um processo repetitivo e que demandava muitas pessoas, horas extras todos os meses e com prazo curto para finalização. Alguns colegas de trabalho já estavam cansados, porque as constantes horas extras tinham deixado de ser algo extraordinário para ser algo recorrente.&lt;/p&gt;

&lt;p&gt;Após colocar a automação em produção, a economia de tempo foi de fato surpreendente. Dentre muitos outros benefícios percebidos, houve um que me deixou muito satisfeito, foi o relato de uma colega ao dizer que no final do dia ela sentia fortes dores no corpo, devido a intensa rotina de digitação e cliques de mouse, necessários para a inserção dos dados no sistema e para impressão dos relatórios, os quais deixaram de ocorrer, porque essas ações passaram a ser realizadas pela RPA.&lt;/p&gt;

&lt;p&gt;A implementação de automações com Python é muito divertida, particularmente eu gosto, mas há quem diga que trabalhar com código é difícil, porém eu acho isso muito relativo, pois mesmo sabendo programar achei muito mais difícil e entediante construir automações com ferramentas low-code(ferramenta para programação com interface gráfica) do que ao contrário. A questão toda é, o quanto você está disposto(a) a aprender determinada tecnologia, porque de uma forma ou outra você terá que gastar tempo para aprender, e quanto mais souber sobre a tecnologia, mais fácil ficará.&lt;/p&gt;

&lt;p&gt;Esses produtos low-code prometem que pessoas menos experientes em tecnologia possam implementar soluções de automação de forma 100% orientada por modelos e fluxo, mas na maioria dos casos essas pessoas precisam voltar aos seus departamentos de TI e solicitar que aloquem programadores profissionais para fazerem o trabalho, então, esses programadores precisam aprender uma maneira proprietária e específica do fornecedor da tecnologia low-code, gastar muito tempo para o desenvolvimento da habilidade e depois devem manter continuamente a frustrante habilidade aprendida. Resumidamente o resultado é a falta de programadores suficientemente qualificados dentro da organização, o que força as empresas a procurarem recursos externos.&lt;/p&gt;

&lt;p&gt;Criar automações com código, apesar de achar divertido, confesso que é trabalhoso, mas como todo bom programador, sempre pensando na otimização do tempo, acabei criando uma biblioteca python, que dei o nome de &lt;a href="https://github.com/codigo100cera/rpapy"&gt;rpapy&lt;/a&gt;, para facilitar o trabalho de implementação e manutenção da RPA. Ele está disponível no &lt;a href="https://github.com/codigo100cera/rpapy"&gt;github&lt;/a&gt; e no repositório oficial do python, o &lt;a href="https://pypi.org/project/rpapy/"&gt;PyPi&lt;/a&gt;. Ainda tem muita coisa a ser feita nele, mas publiquei mesmo assim, pois como um amigo me disse: "se está sendo útil para você, pode ser útil para mais alguém".&lt;/p&gt;

&lt;p&gt;Agora quero criar conteúdos e vídeos com dicas e informações sobre a linguagem python e a criação de automações de processo de negócio, que serão publicados no canal &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber"&gt;Código100Cera&lt;/a&gt; no youtube, a fim de ampliar a quantidade de automatizadores com python e tornar mais democrática a utilização da RPA.&lt;/p&gt;

&lt;p&gt;Então se você gostou da ideia, me siga nas redes sociais, acesse o &lt;a href="https://t.me/joinchat/C_ECNVWoSae_ebzcjfM33w"&gt;grupo do telegram&lt;/a&gt;, entre no &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber"&gt;canal&lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber"&gt;inscreva-se&lt;/a&gt; e toque o sininho, para ser notificado quando for postado novo conteúdo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/codigo100cera"&gt;Dev.To&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/mcsilva-csc/"&gt;Linkedin&lt;/a&gt; | &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber"&gt;Youtube&lt;/a&gt; | &lt;a href="https://t.me/joinchat/C_ECNVWoSae_ebzcjfM33w"&gt;Telegram&lt;/a&gt; | &lt;a href="https://medium.com/@codigo100cera"&gt;Medium&lt;/a&gt; | &lt;a href="https://www.twitch.tv/codigo100cera"&gt;Twitch&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apredendo a utilizar a ferramenta RPAPY com exemplo</title>
      <dc:creator>Maurício Silva</dc:creator>
      <pubDate>Wed, 03 Feb 2021 23:21:13 +0000</pubDate>
      <link>https://dev.to/codigo100cera/apredendo-a-utilizar-a-ferramenta-rpapy-com-exemplo-532l</link>
      <guid>https://dev.to/codigo100cera/apredendo-a-utilizar-a-ferramenta-rpapy-com-exemplo-532l</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fegyr0pa313pqxn7ji31a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fegyr0pa313pqxn7ji31a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Introdução
&lt;/h3&gt;

&lt;p&gt;Existem inúmeras formas de se apreender uma nova tecnologia, biblioteca ou ferramenta, mas na minha opinião, a forma mais fácil e direta é o aprendizado por meio de exemplos. Então neste tutorial vou ensinar como usar a ferramenta &lt;strong&gt;&lt;a href="https://pypi.org/project/rpapy/" rel="noopener noreferrer"&gt;rpapy&lt;/a&gt;&lt;/strong&gt;, para implementação de automações desktop com python, em ambiente windows, e adivinhem como? isso mesmo que você pensou... por meio de uma implementação de exemplo, existente na própria ferramenta.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparando o Ambiente
&lt;/h3&gt;

&lt;p&gt;A primeira coisa que você precisa fazer é, escolher o IDE ou o editor de texto de sua preferência que será utilizado para o desenvolvimento dos scripts de automação, porém para este tutorial utilizarei o &lt;a href="https://code.visualstudio.com/#alt-downloads" rel="noopener noreferrer"&gt;VsCode&lt;/a&gt; com alguns plugins (Python, Robot Framework Intellisense, Hyper Term Theme , Pylance e Material Icon Theme), entretanto, a instalação do IDE e dos plugins estão fora do escopo deste tutorial, contudo a instalação é bem fácil, bastando acessar o site oficial do &lt;a href="https://code.visualstudio.com/#alt-downloads" rel="noopener noreferrer"&gt;VsCode&lt;/a&gt; e seguir as orientações do guia do usuário. &lt;br&gt;
Após concluída a instalação, crie um diretório (exemplo: rpa-project-exemplo/) para o projeto e abra-o com o IDE.&lt;/p&gt;

&lt;p&gt;Antes de começar a desenvolver automações ou qualquer outro tipo de projeto em python, será necessário criar um ambiente virtual, para instalação da ferramenta rpapy e suas dependências, pois desta forma será possível isolar as dependências de cada projeto, bem como evitar o conflito entre versões das mesmas bibliotecas. Acesse o &lt;a href="https://github.com/codigo100cera/rpapy/blob/master/README.md" rel="noopener noreferrer"&gt;README.md&lt;/a&gt; do repositório github ou &lt;a href="https://youtu.be/IcRl7WUL7rk" rel="noopener noreferrer"&gt;assista este vídeo&lt;/a&gt; no canal &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber" rel="noopener noreferrer"&gt;codigo100cera&lt;/a&gt;, onde é explicado o processo de instalação da ferramenta, desde a criação do ambiente virtual até a sua ativação.&lt;/p&gt;
&lt;h3&gt;
  
  
  Implantando a Automação de Exemplo
&lt;/h3&gt;

&lt;p&gt;A ferramenta rpapy vem com um script de automação desktop de exemplo, o qual desenha e pinta na janela do programa mspaint da Microsoft. Essa automação é construída com scripts python e &lt;strong&gt;&lt;a href="https://robotframework.org/" rel="noopener noreferrer"&gt;robotframework&lt;/a&gt;&lt;/strong&gt;, com isso, quero mostrar o quanto pode ser flexível e poderoso utilizá-los em conjunto, e para que a RPA funcione, será preciso realizar alguns passos.&lt;/p&gt;

&lt;p&gt;1) Primeiro você Precisa executar a ferramenta, então, se tudo ocorreu bem na preparação do ambiente, após a execução do comando &lt;code&gt;rpapy&lt;/code&gt; no terminal, será exibido um menu de teclas de atalho como apresentado a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rpa-project-exemplo-env)C:\rpa-project-exemplo&amp;gt;rpapy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;***TURN ON AGENTPY***
        **************TECLAS DE ATALHO**************
        &amp;lt;CTRL&amp;gt;+&amp;lt;ALT&amp;gt;+P: CAPTURAR IMAGEM OU OCR
        &amp;lt;CTRL&amp;gt;+&amp;lt;ALT&amp;gt;+R: ALTERAR NOME DO ARQUIVO
        &amp;lt;CTRL&amp;gt;+&amp;lt;ALT&amp;gt;+B: ALTERNAR ENTRE OS BACKENDS
        &amp;lt;CTRL&amp;gt;+I:       INSPECIONAR ELEMENTO DE UI
        &amp;lt;CTRL&amp;gt;+&amp;lt;CMD&amp;gt;+C: EXIBIR CONFIGURAÇÃO ATUAL
        &amp;lt;CTRL&amp;gt;+&amp;lt;CMD&amp;gt;+E: UPLOAD IMPLEMENTAÇÃO EXEMPLO
        &amp;lt;CTRL&amp;gt;+&amp;lt;CMD&amp;gt;+X: DESLIGAR O AGENTE
        ********************************************
X:  407 Y:  360
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma caixa de diálogo também será exibida solicitando a inserção do nome do arquivo de script onde será implementado o código de automação. Nela serão aceitas apenas nome de arquivos com as extensões .py ou .robot, por padrão ele vem com o nome main.robot, para este tutorial deixe o nome e extensão sugeridos pela ferramenta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi9gyw9th6p1mgo005l4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fi9gyw9th6p1mgo005l4n.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se ocorreu tudo bem neste ponto a ferramenta já criou uma estrutura básica como a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rpa-project-exemplo/
├── .env
├── resources/
│   ├── images/
│   └── keywords.robot
├── rpa-project-exemplo-env/
└── tasks/
    └── main.robot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos carregar a implementação de exemplo pressionando a combinação de teclas &lt;code&gt;&amp;lt;CTRL+CMD+E&amp;gt;&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;CTRL&amp;gt;+&amp;lt;CMD&amp;gt;+E: UPLOAD IMPLEMENTAÇÃO EXEMPLO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após o acionamento da funcionalidade será exibido uma sequência de caixas de mensagens com avisos e decisões sobre substituições de arquivos que poderão ocorrer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7bnw252b31o0s1gktzqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7bnw252b31o0s1gktzqf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leia com atenção todos os avisos e clique na opção OK para avançar ou CANCEL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwuu0oc19zlx2okoor4f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwuu0oc19zlx2okoor4f6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muita atenção quando for solicitado a substituição de algum arquivo, se não desejar que o arquivo seja substituído, renomeie o arquivo que está no projeto antes de confirmar a substituição e depois continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5tyr7sxybe0ck5jgii9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F5tyr7sxybe0ck5jgii9k.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A funcionalidade para carregar a implementação de exemplo sempre solicita a autorização para substituir os arquivos marcados com asterisco abaixo, quando estes já existirem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rpa-project-exemplo/
├── resources
│   ├── custom_keywords.py*
│   ├── desenhos
│   │   ├── borboleta.txt*
│   │   └── robotframework.txt*
│   └── keywords.robot*
└── tasks
    └── main.robot*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando concluído, o carregamento da implementação de exemplo, todos os scripts estão prontos para a execução, mas ainda será necessário efetuar a captura das imagens dos elementos de interface, em que serão aplicados às ações de teclado e mouse pela automação, desta forma será necessário realizar mais alguns passos.&lt;/p&gt;

&lt;p&gt;2) Altere e salve o arquivo &lt;code&gt;.env&lt;/code&gt; após tirar o &lt;code&gt;#&lt;/code&gt; que está na frente das variáveis de ambiente MAX_WAIT_MANUTENCAO e VERIFICAR_MODO.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###VARIAVEIS DE AMBIENTE PYTHON-DOTENV

#RESOURCES_DIR_NAME=resources
#RESOURCES_KEYWORDS_FILE_NAME=keywords.robot
#IMAGES_DIR_NAME=images
#IMAGES_ERROR_DIR_NAME=images_error
#TASKS_DIR_NAME=tasks
MAX_WAIT_MANUTENCAO=5
VERIFICAR_MODO=True
#ARQUIVO_TEMPORARIO_ATIVO=False
#NOME_ARQUIVO_TEMPORARIO=temp.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A variável de ambiente VERIFICAR_MODO, ativa a verificação da escolha do modo manutenção toda vez que o script é iniciado, e a variável MAX_WAIT_MANUTENCAO, quando ativado o modo manutenção, tenta encontrar o elemento na tela em que irá aplicar alguma ação de teclado ou mouse, com a espera máxima em segundos que foi atribuida, se não for possível encontrar a imagem, ele solicitara que a existente seja substituída no projeto de forma iterativa, desta forma basta seguir os avisos que são emitidos com atenção.&lt;/p&gt;

&lt;p&gt;3) Abra um novo terminal na raiz do projeto, ative o ambiente virtual e execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rpa-project-exemplo-env)C:\rpa-project-exemplo&amp;gt;robot -d log tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida será apresentado uma caixa de mensagem perguntando se pretende rodar a automação no modo manutenção, clique em sim, para ativar a funcionalidade e com isso atualizar o diretório images e concluir a instalação da automação de exemplo, incluindo todas as imagens necessárias. Essa é uma funcionalidade muito importante, porque facilita a implantação e atualização da automação em outros computadores de forma interativa sem a necessidade de manipulação do código implementado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvi43bae8qga8rbumj56f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvi43bae8qga8rbumj56f.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assim que ativado o modo manutenção, no terminal será apresentado a saída abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rpa-project-exemplo-env)C:\rpa-project-exemplo&amp;gt;robot -d log tasks
==================================================================
Tasks
==================================================================
Tasks.Main :: Documentação da Suite de Tasks Robot Framework
==================================================================
Tarefa principal                                  Hello Everybody!

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) A primeira ação da automação é abrir e maximizar o software de desenho mspaint, em seguida ele verificará se o ícone da barra de título do software foi encontrado, como ainda não existe nenhuma imagem no diretório, ele apresentará uma caixa de mensagem, informando o nome da imagem a ser alterada, e mostrará a visualização de uma imagem provisória com o aviso de imagem não encontrada, para continuar é preciso confirmar com um clique no botão OK da caixa de diálogo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiqx0c1rgnqcx8hlks8k3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiqx0c1rgnqcx8hlks8k3.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5) O processo de alteração da imagem é simples, pois basta ler as mensagens com atenção e efetuar as ações necessárias. &lt;br&gt;
A próxima mensagem irá solicitar qual das seguintes opções deseja executar: IMG|IMG_OCR|OCR|CANCEL, para essa implantação será necessário apenas acionar a opção IMG.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhbrb5wxbgzv9he735wbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhbrb5wxbgzv9he735wbs.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6) Antes de selecionar o retângulo, para realizar a captura da imagem do elemento de interface, será apresentado uma caixa de mensagem com a opção de tempo de espera de 5s ou 10s antes de ser congelada a tela para a seleção.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftfct6jiibqx9iswzpjd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftfct6jiibqx9iswzpjd5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7) Durante esse período de espera, você pode acionar algum menu ou qualquer elemento da interface para que no momento do congelamento da tela  tudo esteja no ponto para a seleção do retângulo, assim que congelado, o ícone do mouse será alterado para um sinal de &lt;strong&gt;+&lt;/strong&gt;, a partir desse momento é só pressionar o botão esquerdo do mouse no elemento da tela e arrastar para formar um retângulo sobre o elemento que será capturado uma imagem dele.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr1dqg4q8jcds2dj94xm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr1dqg4q8jcds2dj94xm4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8) Agora será necessário indicar a região na tela, onde o elemento selecionado no passo anterior, deverá ser procurado pela automação. Então clique em OK e selecione retângulo da área que determinará região, observando que o tamanho da região deve ser maior que o tamanho da seleção do elemento de interface capturado. Isso serve para otimizar a procura da imagem pela automação, além de permitir uma maior flexibilidade com relação às coordenadas em que o elemento poderá surgir na tela sem causar erros.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwmvu0g5147rg58zsnq2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwmvu0g5147rg58zsnq2n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste ponto selecione a região, que neste caso será área do retângulo pontilhado como na imagem a seguir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjbmhdzr30ku8jyvxu5mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjbmhdzr30ku8jyvxu5mw.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O tamanho da região pode ser até o tamanho total da tela primária do computador.&lt;/p&gt;

&lt;p&gt;9) Após a seleção será apresentado outra caixa de mensagem de confirmação, até este ponto será possível cancelar a alteração da imagem, mas depois de confirmado, não mais, então será apresentada a quantidade de imagens que serão substituídas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdai4comj1pfsugkkgefc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdai4comj1pfsugkkgefc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10) A seguir Confirme em "SIM" para eliminar todas as imagens com o mesmo nome e "NAO" para manter todas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs7uowpqb4143r814ipgr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs7uowpqb4143r814ipgr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11) Por fim será verificado se deseja visualizar a imagem que acabou de ser capturada, se optar em OK abrirá uma janela de visualização que fechará automaticamente após 5 segundos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flfkbjnumb0y6fcf3b5q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flfkbjnumb0y6fcf3b5q2.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após cada captura completada a ação programada é executada no elemento, esse é o ciclo completo para adição de imagens da automação no modo manutenção, agora basta repetir esses passos até completar todas as imagens necessárias para a instalação da implementação de exemplo.&lt;/p&gt;

&lt;p&gt;Existem algumas particularidades quanto a captura de imagens de alguns componentes neste exemplo que irei descrever.&lt;/p&gt;

&lt;p&gt;Os elementos &lt;strong&gt;campo de texto&lt;/strong&gt; devem ser capturadas as imagens dos retângulos apenas dos rótulos e não do campo todo, como exibido na imagem a seguir, e no passo seguinte não esquecer de sempre selecionar uma região maior do que o tamanho do elemento capturado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiou0karsgankxxhqr58j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fiou0karsgankxxhqr58j.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um outro ponto que geralmente as pessoas travam, é exatamente no momento da captura do &lt;strong&gt;item&lt;/strong&gt; do &lt;strong&gt;menu arquivo&lt;/strong&gt; quando no modo manutenção, porque é necessário efetuar o clique no menu, para que ele expanda e seja possível que a automação identifique e efetue a ação. Como o clique, no &lt;strong&gt;menu arquivo&lt;/strong&gt;, é realizado pela automação no passo anterior, se você não efetuar um clique manualmente, a automação não será capaz de encontrar a imagem na tela, porque o menu estará contraído. Desta forma, logo após a captura do item de menu propriedades, você deverá clicar rapidamente, mais precisamente antes de 5 segundos, pois é o tempo padrão configurado no arquivo .env para o tempo máximo de tentativas de busca da imagem na tela, quando no modo manutenção, desta forma se precisar de mais tempo basta mudar o valor da variável de ambiente MAX_WAIT_MANUTENCAO e reiniciar o script. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhvodoux5znr8115m6kfa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fhvodoux5znr8115m6kfa.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quando completado todas as capturas de imagens, provavelmente o desenho no mspaint estará pronto e a implantação concluída.&lt;/p&gt;

&lt;p&gt;Altere o arquivo &lt;code&gt;.env&lt;/code&gt; comentando com &lt;code&gt;#&lt;/code&gt;, como a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###VARIAVEIS DE AMBIENTE PYTHON-DOTENV

#RESOURCES_DIR_NAME=resources
#RESOURCES_KEYWORDS_FILE_NAME=keywords.robot
#IMAGES_DIR_NAME=images
#IMAGES_ERROR_DIR_NAME=images_error
#TASKS_DIR_NAME=tasks
#MAX_WAIT_MANUTENCAO=5
#VERIFICAR_MODO=True
#ARQUIVO_TEMPORARIO_ATIVO=False
#NOME_ARQUIVO_TEMPORARIO=temp.txt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora feche todas as janelas abertas do mspaint e execute novamente a implementação digitando o seguinte comando no terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rpa-project-exemplo-env)C:\rpa-project-exemplo&amp;gt;robot -d log tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se tudo der certo, após a conclusão da automação a imagem estará desenhada na janela do mspaint e será apresentado no terminal o seguinte resultado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4vzv21n9m97zazej0tfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4vzv21n9m97zazej0tfz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Além do desenho dos logos, existe o desenho geométrico de uma borboleta, para que seja trocado a imagem que será desenhada, basta alterar a atribuição do valor &lt;strong&gt;robotframework&lt;/strong&gt; para &lt;strong&gt;borboleta&lt;/strong&gt; na variável ${NOME_IMAGEM} no arquivo tasks/main.robot&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;${NOME_IMAGEM}      robotframework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E execute novamente a automação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(rpa-project-exemplo-env)C:\rpa-project-exemplo&amp;gt;robot -d log tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A automação deverá se comportar semelhantemente a execução apresentada neste &lt;a href="https://github.com/codigo100cera/rpapy/blob/master/README.md" rel="noopener noreferrer"&gt;gif animado&lt;/a&gt;, contido no README.me do projeto no github.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Neste tutorial não foram abordados todos os detalhes da sintax do &lt;a href="https://robotframework.org/" rel="noopener noreferrer"&gt;robotframework&lt;/a&gt;, que poderá ser encontrado no &lt;strong&gt;&lt;a href="https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html" rel="noopener noreferrer"&gt;guia do usuário do robotframework&lt;/a&gt;&lt;/strong&gt;, e nem todas as funcionalidades da ferramenta &lt;a href="https://github.com/codigo100cera/rpapy" rel="noopener noreferrer"&gt;rpapy&lt;/a&gt;, contudo assim que possível, criarei alguns vídeos no canal do youtube para explicar mais sobre essas elas.&lt;/p&gt;

&lt;p&gt;Agradeço por você ter chegado até o fim deste tutorial, mas não deixe de seguir os seguintes passos: estude o código gerado, faça alterações e teste as alterações, porque se aprende, ainda muito mais, fazendo.&lt;/p&gt;

&lt;p&gt;Então se você gostou deste tutorial entre no grupo do &lt;a href="https://t.me/joinchat/VahJp4lsIBSN8zff" rel="noopener noreferrer"&gt;telegram&lt;/a&gt;, me siga nas redes sociais, entre no &lt;a href="https://www.youtube.com/channel/UCbrw7-reRWpQD1JBubCl4QQ?view_as=subscriber" rel="noopener noreferrer"&gt;canal&lt;/a&gt;, inscreva-se e toque o sininho, para ser notificado quando for postados novos conteúdos.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
