É chegado o momento de falar sobre um tema que eu gosto muito e falo pouco, trabalho a alguns anos com isso e é um assunto pouco abordado nos blogs de tecnologia e um dos primeiros artigos até o momento que aborda a ferramenta Wintask.

 

Enjoy 😉

 

Processos de automação robóticas utilizando wintask

O presente artigo irá mostrar como criar robôs para automatizar processos, integrando a ferramenta Wintask com o C#. O tema é útil para quem tem o interesse de otimizar qualquer processo manual que não precise de raciocínio.

Alguns dizem que a automação começou com a invenção da roda e progrediu através de outras invenções notáveis, como a imprensa, o descaroçador de algodão, o motor de Babbage.

RPA (Automação de processos de Robótica) é a aplicação de tecnologia que permite que os funcionários de uma empresa possam utilizar um “robô” para capturar e interpretar os aplicativos existentes para o processamento de uma transação, manipulação de dados, desencadeando respostas e se comunicando com outros sistemas.

Qualquer empresa que usa trabalho em grande escala geral com algum processo de conhecimento, onde as pessoas estão realizando um alto volume de funções ou processo altamente funcionais e repetitivos, irá aumentar as suas capacidades e economizar tempo e dinheiro, pois o RPA pode melhorar as operações de service desk e o monitoramento de dispositivos de rede, separando a escalabilidade de recursos humanos, permitindo a empresa lidar com a demanda de curto prazo, sem recrutamento extra ou treinamento.

Assim como robôs industriais estão revolucionando as indústrias, criando altas taxas de produção e melhoria da qualidade, os softwares para automação “robôs” estão revolucionando a maneira de pensar e administrar processos de negócios, suporte, fluxo de trabalho, infraestrutura remota e trabalho de back-office.

Essa tecnologia pode ser aplicada especificamente a uma vasta gama de indústrias.

Em termos gerais, automação robótica corresponde a uma tendência emergente da tecnologia para substituir as funções desempenhadas por seres humanos, particularmente no setor de serviços.

Robôs de software têm um emprego na vida real, para completar o trabalho manual demorado e repetitivo para você.

Estamos falando de um software que interage com o ambiente de trabalho para pegar partes de processos e encaminhá-los à realização. Na verdade, o diferenciador fundamental é que este software pode interagir com a interface do usuário e sendo assim ele pode interagir com qualquer aplicativo.

Tão simples como isso soa, as implicações são enormes. Isso significa que, em vez de gastar dinheiro para integrar software aplicativo tradicional, o software robótico é uma ferramenta que organiza outras aplicações através da interface de usuário já existente.

Iremos construir robôs, mas não aqueles robôs hardware, como Arduino, e sim robô software onde você pode utilizar uma máquina ligada executando tarefas pré-programadas por você.

 

Vantagens

 

Errar é humano, mas isso não é uma desculpa de que vai agradar o seu cliente se uma demanda não foi bem realizada ou se foi fora do prazo e com defeito. Os robôs, por natureza, impedem o erro humano e resolvem um dos maiores problemas enfrentados pelas organizações: a certeza de que os processos simples serão executados pela máquina e serão menos propensos a erros.

 

e6fcea97c60144a9e3fa16a503e187cc-d7v43ry-e1409572514660

 

Wintask

 

Iremos utilizar a plataforma WinTask para a construção de soluções de automação em um stand-alone ou PC em rede, criando uma ferramenta de automação de tarefas para automatizar todas as coisas que você faz no Windows 2003 Server e Windows 7 de 32 bits (para o Windows 7 de 64 bits, Windows 8 64 bit, Windows 2008 R2 64 bit ou Windows 2012 com WinTask x64).

Você pode por exemplo, lançar um pacote de contabilidade, integrar dados de outros programas, calcular os resultados com estes novos dados e em seguida, imprimi-los.

Você também pode lançar um pacote de emulação de terminal, navegar através das telas do host, pegar dados em diferentes telas e colá-los de volta em seu PC, navegar em um site, extrair preços e recuperá-los em uma planilha do Excel ou criar um script de instalação para instalar automaticamente software em milhares de PCs.

Vamos aprender a usar algumas das funções da ferramenta para realizar um login no Facebook e postar uma mensagem.

Após isso, iremos integrá-la com o C# criando um aplicativo que receba o email, senha e mensagem a ser enviada.

Utilizando a ferramenta

Faça o Download do Wintask através de sua página princiopal (http://www.wintask.com/download-wintask.php).

Na Figura 1 podemos observar o aplicativo, onde iremos utilizar o botão Rec para gravar o nosso primeiro processo.

Figura 1. Tela principal

Figura 1. Tela principal(Clique na imagem para ampliar)

 

Devemos selecionar qual é a forma de gravação, temos opções de iniciar com uma aplicação ou com uma das opções de browser (IE,FireFox,Chrome). Se selecionarmos nothing irá minimizar o Wintask. Então para o nosso exemplo iremos selecionar o Chrome.

Ao selecionar o navegador vamos selecionar a opção para abrir o browser maximizado, por que assim garantimos que o browser estará sempre  ele na sua maior resolução e vamos colocar o endereço do Facebook, como mostra a Figura 2.

Figura 2. Configuração para o Facebook

Figura 2. Configuração para o Facebook

Ao clicar em “Ok” o browser vai abrir na página que colocamos e uma toolbar aparecerá na tela e a partir de agora tudo o que fizermos será gravado, como mostra a Figura 3.

Figura 3. Página escolhida com a toolbar

Figura 3. Página escolhida com a toolbar

Após digitar um email e senha e clicar em entrar, ao clicar no ícone “X” da toolbar do Wintask, ele gerou um código fonte da gravações do processo, como mostra a Listagem 1.

Listagem 1. Código gerado pelo processo de inserção de login e senha

StartBrowser("CH", "http://www.facebook.com", 3)

UsePage("Bem-vindo ao Facebook - acesse, cadastre-se ou saiba mais.")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            WriteHTML("INPUT TEXT[NAME='email']", "SeuEmailDeAcessoDoFaceBook")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            ClickHTMLElement("DIV[OUTERTEXT='Logotipo do FacebookE-mail ou telefoneSenhaMantenha-me conectadoEsqueceu sua senha?',INDEX='6']")

            WriteHTML("INPUT PASSWORD[NAME='pass']", "SuaSenha")

            ClickHTMLElement("INPUT SUBMIT[VALUE='Entrar']")

 

O WinTask inclui uma linguagem de programação semelhante ao Visual Basic. Quando você usa o modo de gravação, essas funções são geradas automaticamente pelo WinTask e compiladas em um script completo. Podemos também modificar ou criar Scripts diretamente na linguagem de programação usando essas funções.

O Wintask tem uma biblioteca repleta de informações e muito completa sobre todas as funções. Ela pode ser baixada através do Link http://www.wintask.com/wintask-functions.php

A função WriteHtml lê o campo HTML da página, mas nem sempre ela consegue reconhecer o campo, por isso teremos que selecionar outro tipo de gravação. Uma dica muito importante no Wintask é que para as gravações funcionarem de forma correta, é necessário ir no menu configure/recording e selecionar a opção Low Level Recording, pois essa opção irá garantir que todos os clicks sejam computados. Também é recomendado selecionar a opção Insert Pause Function para garantir que ele insira todas as pausas que serão feitas nas gravações. Lembre-se que o seu robô irá fazer o mesmo trabalho que um humano, então certifique-se que você irá adicionar pausas a mais no seu código para garantir que a estabilidade de rede ou de processamento não interfira no perfeito funcionamento do seu robô, como mostra a Figura 4.

 

Figura 4. Inserção de pausa

Figura 4. Inserção de pausa

 

 

Com essa alteração realizada, vamos fazer com que o robô entre no Facebook com usuário e senha e poste uma mensagem de “Teste de Robô Wintask Automation”.

A gravação é algo que devemos tomar muito cuidado, se estamos querendo um robô que apenas entre no Facebook e mande uma mensagem, você tem que conferir se o Facebook está deslogado no brownser que selecionou para executar a função, se ele estiver logado a execução não irá funcionar por que nesse primeiro exemplos realizamos apenas a função de login. Utilizamos muito desse processo quando vamos entender como automatizar as funções do cliente: poderíamos fazer uma função que saia do Facebook caso esteja logado, poderíamos também realizar um teste para saber se o Facebook logado é o mesmo da pessoa que está entrando com os dados também. Clicar em Rec e dar para o seu cliente realizar as funções dele do dia a dia é apenas um mergulho raso na construção de um sistema robótico de automação, pois todos os outros fatores que poderiam acontecer devem ser tratados atráves do seu sistema.

O código gerado após o nosso segundo teste foi o mesmo apresentado na Listagem 2.

Listagem 2. Código gerado depois do teste.

  StartBrowser("CH", "http://facebook.com", 3)</pre>
<pre>
UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,846,35)

UseWindow("CHROME.EXE|Chrome_WidgetWin_1|Bem-vindo ao Facebook - acesse, cadastre-se ou saiba mais. - Google Chrome",1, NoActivate)

            MoveMouse(854,128)

            ClickMouse(Left,Up,854,128)

            Pause 104 Ticks

            SendKeys("[email protected]<Tab>MinhaSenha<Enter>")

            Pause 1890 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,463,110)

UseWindow("CHROME.EXE|Chrome_WidgetWin_1|Facebook - Google Chrome",1, NoActivate)

            ClickMouse(Left,Up,471,203)

            Pause 239 Ticks

            SendKeys("Teste de Robô Wintask Automation")

            Pause 1079 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,725,177)

UseWindow("CHROME.EXE|Chrome_WidgetWin_1|Facebook - Google Chrome",1, NoActivate)

            MoveMouse(732,270)

            ClickMouse(Left,Up,732,270)

 

Analisando o código gerado encontramos algumas novas funções, como o MoveMouse e o CLickMouse. Agora invés de termos o nome dos elementos HTML temos as posições dos clicks na tela,essas funções funcionam em qualquer lugar, justamente por não dependermos do nome dos elementos, assim se os nomes dos elementos mudarem não teremos alterações em nosso código.

A função low level recording, grava todos os movimentos do Mouse e, por questões de performance, devemos usar com parcimônia a opção move mouse, pois, na maioria das vezes já temos as posições da tela na função MouseClick então podemos deixar o robô ir direto a posição invés de mostrar todo o movimento do mouse até chegar na posição.

Vamos fazer a limpeza do código tirando os MoveMouse e colocando as mesmas posições para as funções ClickMouse Left/Up e left/down.

Vamos fazer a limpeza do código tirando os MoveMouse e colocando as mesmas posições para as funções ClickMouse Left/Up e left/down. , pois assim temos o total controle de onde o robô vai clicar, veja na Listagem 3 a implementação do código limpo.

Listagem 3. Implmentação do código limpo

StartBrowser("CH", "http://facebook.com", 3)

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,846,35)

UseWindow("CHROME.EXE|Chrome_WidgetWin_1|Bem-vindo ao Facebook - acesse, cadastre-se ou saiba mais. - Google Chrome",1, NoActivate)

            MoveMouse(854,128)

            ClickMouse(Left,Up,854,128)

            Pause 104 Ticks

            SendKeys("[email protected]<Tab>MinhaSenha<Enter>")

            Pause 700 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,463,110)

            ClickMouse(Left,Up,463,110)

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            Pause 239 Ticks

            SendKeys("Teste de Robô Wintask Automation")

            Pause 1079 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,725,177)

            ClickMouse(Left,Up,725,177)

Para rodar clique no Play e ele irá pedir para salvar, que gerará três arquivos: um .lst, .rob e .src.A extensão de arquivo LST está associado com o Microsoft Macro Assembler (MASM). O .rob é um binário gerado pelo Wintask e o .src é onde guardamos o código.

Vamos agora para integração com o C#, criando um aplicativo na seguinte estrutura com WPF ou Windows Forms, como mostra a Figura 5.

 

Figura 5. Estrutura do projeto

Figura 5. Estrutura do projeto

 

Altere o seu arquivo .Src para receber parâmetros através da function command$(), através desse parâmetro será possível ler os dados que daremos no C#, como mostra a Listagem 4.

Listagem 4. Função Command$()

Pause 500 Ticks

StartBrowser("CH", "http://facebook.com", 3)

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,846,35)

UseWindow("CHROME.EXE|Chrome_WidgetWin_1|Bem-vindo ao Facebook - acesse, cadastre-se ou saiba mais. - Google Chrome",1, NoActivate)

            MoveMouse(854,128)

            ClickMouse(Left,Up,854,128)

            Pause 104 Ticks

            SendKeys(Command$(1)+"<Tab>"+Command$(2)+"<Enter>")

            Pause 700 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,463,110)

            ClickMouse(Left,Up,463,110)

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            Pause 239 Ticks

            SendKeys(Command$(3))

            Pause 700 Ticks

UseWindow("CHROME.EXE|Chrome_RenderWidgetHostHWND|Chrome Legacy Window",1, NoActivate)

            ClickMouse(Left,Down,725,177)

            ClickMouse(Left,Up,725,177)

O código do botão enviar mensagem no C# ficará como o apresentado na Listagem 5.

Listagem 5. Botão Enviar mensagem

using System;

using System.Diagnostics;

using System.Windows;

namespace RoboFacebook

{

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

        private void btnEnviarMensagem_Click(object sender, RoutedEventArgs e)

        {

            string robo = @"C:\RoboFace.rob";

            ProcessStartInfo startInfo = new ProcessStartInfo("TASKEXEC.EXE");

            startInfo.Arguments = String.Format(" \"{0}\"  \"{1}\" \"{2}\" \"{3}\"", robo, txtEmail.Text, txtSenha.Password, txtMensagem.Text);

            Process.Start(startInfo);    

        }

    }

}

 

 

Thinking Robot

 

Pronto, agora basta executar e se divertir. Vale lembrar que as posições do click dependem da resolução da tela e que para executar o .rob precisamos do Wintask instalado.

A partir de agora estamos aptos a automatizar qualquer processo, poderíamos criar vários .rob para cada função do WinTask para termos mais controle de cada função assim reduziríamos os erros e seria uma manutenção mais fácil até para os próximos robôs . Os ramos de implementações são infinitos, poderíamos fazer um aplicativo pra realizar votações em sites de pesquisa ou um robô que realize vários testes de stress em sua aplicação de diferentes máquinas.

Com a implementação de software de automação, você já estabeleceu uma base para construir o aplicativo que você quiser, mudar, escalar e inovar. Automação é uma solução que deve resolver mais de um problema. Esta capacidade de começar a automatizar os processos monótonos é inestimável.

 Link  código fonte:

https://github.com/pablojuancruz/RoboCSharp

Por Hoje é só. Até a próxima.

Qualquer dúvida, crítica e/ou sugestão envie e-mail para [email protected]

 

Microsoft Student Partner

Participante do 1º torneio de robótica educativa e iniciação científica Centro Paula Souza e Lego Education Brazil, Formado como técnico em informática com ênfase em programação também pelo Centro Paula Souza. Atualmente estuda na FIAP. Apaixonado por tecnologia e disseminação de conhecimento. Atua há 6 anos na área de tecnologia da informação, com linguagens como:C#, NODEJS, JavaScript,Delphi e Java.

“Que o teu orgulho e objetivo consistam em pôr no teu trabalho algo que se assemelhe a um milagre”
Leonardo da Vinci.

Comentários

comentarios