RPA: 5 Dicas práticas para elevar a performance de seus robôs

 |  10/11/2021
 |  eye1.449 visualizações
eye1.449 visualizações

Ainda não sabe o que é RPA? Está perdendo a oportunidade de conhecer sobre uma das áreas de maior crescimento no mercado de trabalho atualmente. Confira nosso artigo: RPA – O que é Robotic Process Automation?

Desenvolver RPA é uma tarefa que a princípio parece ser muito simples, certo?

Errado! Apesar de parecer fácil, desenvolver um robô vai muito além de produzir simples scripts de automação que interagem com telas, realizam preenchimento de campos, ou envio de emails. O principal objetivo do RPA é eliminar desperdícios e otimizar processos custosos na empresa, e o modo mais prático e rápido de se programar um robô que interage com sistemas web, é fazendo a navegação entre telas e clicks em botões (utilizando selenium webdriver ou ferramentas low code).

Muitos desenvolvedores RPA iniciantes e até os mais experientes não consideram as diferentes formas de otimizar e encurtar o trabalho do robô ao fazer suas automações. Além de otimizar o processo antes de pensar na robotização, existem uma série de recursos, técnicas, e boas práticas que se bem aplicadas, podem reduzir o tempo de processamento do seu robô pela metade.

Por que encurtar o tempo de processamento do robô, se eu vou levar muito mais tempo para desenvolver e aplicar todas essas técnicas?

Ao contratar uma implantação de RPA, o seu cliente busca e espera performance e otimização de tempo nos seus processos. Você pode utilizar uma ferramenta low code ou programar com selenium (em sua forma pura e simples), para entregar ao cliente mais robôs em menos tempo. Mas qual será a vantagem, se seus robôs não atenderem a demanda de processamento do cliente, ou apenas realizarem o básico, não superando as expectativas? Qual a finalidade de entregar um robô em menos de uma semana? Se ao final, para processar o backlog do cliente você precisará colocar várias diferentes instâncias do mesmo robô para serem executadas, consumindo maior processamento, e provavelmente criando uma estrutura de manutenção mais complexa e custosa.

Então lembre-se, mesmo que clientes gostem de receber entregas rápidas, proporcionar uma surpresa positiva através do potencial de robôs bem otimizados pode resultar em boas oportunidades e abrir muitas portas para todos os envolvidos. Portanto, desenvolvedores RPA devem ter como foco principal durante o desenvolvimento entregar robôs com performance mantendo a qualidade de código (seja este código gerado por ferramentas ou feito a mão), e não velocidade de desenvolvimento ou apenas quantidade de robôs. O desempenho de um código bem feito trará resultados acima da média, estabelecendo um projeto sólido e de boa manutenção.

Entendido o motivo de priorizar o desempenho final em detrimento do tempo de desenvolvimento, vamos às dicas de otimização para seus robôs web:

1 – Reduza as navegações

Evite fazer a navegação por clicks em botões ou menus, ou melhor, evite fazer navegações através do website, vá direto ao ponto sempre que possível. Com este simples passo você irá economizar muitos segundos, e talvez até minutos, do tempo final de processamento da sua automação. Ao evitar qualquer interação desnecessária com o website, você também reduzirá a ocorrência de possíveis erros relacionados à tela, como uma lentidão ou falha no carregamento de algum elemento.

Obs: todos os exemplos utilizados estão em java, porém a mesma lógica é aplicável a outras linguagens ou ferramentas low code, o uso de código para demonstração neste artigo se deve à simplicidade do entendimento da lógica.

Tomemos como exemplo uma automação de coleta de produtos no Mercado Livre:

Qual a efetiva necessidade em acessar a home do site, preencher o campo de pesquisa e clicar em ‘Buscar? quando você pode acessar diretamente a página de pesquisa pela URL, passando o elemento de busca como parâmetro!

Podemos montar previamente a URL antes mesmo de abrir o navegador, utilizando a URL original como base, e o nome do produto a ser buscado (substituindo espaços por ‘-’), veja o exemplo:

Até mesmo as buscas de registros em sistemas internos de empresas podem ser reduzidas dessa forma, cabe ao desenvolvedor RPA analisar a estrutura das páginas e suas requisições, de modo a identificar todas as oportunidades de encurtar as navegações.

Veja exemplos de busca diretamente em URL em outras plataformas conhecidas, analise o padrão de pesquisa de cada URL:

Zoom:

Amazon:

Submarino:

2 – Priorize o JavaScript

O Selenium e até mesmo algumas ferramentas low code possuem um recurso muito valioso que poucos desenvolvedores utilizam: a possibilidade de injetar comandos JavaScript na página. Não utilizar este recurso é um grande desperdício de desempenho, pois, mesmo que as ferramentas ofereçam todos os comandos úteis para interação com o site (como preencher campos de texto ou efetuar clicks), estas ações quando feitas de maneira padrão tomam tempo de processamento que pode ser reduzido injetando scripts diretamente na página.

Ao invés de preencher campos de texto utilizando qualquer comando do selenium, envie um comando JS de alteração de valor dos inputs, como no exemplo a seguir:

Para preenchimento de um único campo, utilize um comando único diretamente no JavascriptExecutor:

No lugar de clicks em botões, analise a possibilidade de ativar os eventos JS contidos nos elementos, como neste exemplo abaixo:

Caso o evento JS não exista no elemento, você pode criá-lo utilizando o seletor:

Caso a página tenha mais de um campo para ser preenchido, considere enviar um único comando javascript para que todo o preenchimento aconteça de uma vez. Não se esqueça de fazer a separação de cada comando utilizando ponto e vírgula (;)

Para uma melhor performance na concatenação de strings, utilize StringBuilder no Java ou C#

Essa dica também se aplica a robôs feitos em plataformas low code.

Mas isso não gera um código muito bagunçado, ou de difícil manutenção?

Não, desde que você organize corretamente seu código! Crie métodos para enviar estes comandos com mais simplicidade e sem repetição de código, e caso a automação tenha alta complexidade, crie uma classe somente para esses métodos utilitários. Lembrando que, para melhor utilizar esta prática, é necessário conhecimento básico em JavaScript.

Veja o exemplo de uma classe utilitária:

O código apenas retorna o comando javascript em formato de string, e pode ser enviado para o JavascriptExecutor do selenium

Não se esqueça de tratar as aspas duplas utilizando o padrão \” para não ter problemas com os seletores.

Para testar o funcionamento dos scripts criados antes de colocá-los no código da sua automação, basta seguir estes passos:

  1. Navegue até o local da página no qual deseja criar uma interação JS
  2. Pressione F12 ou clique com o botão direito sob o elemento, e clique em “Inspecionar elemento”
  3. Procure pela aba “Console”
  4. Coloque seus comandos no console e pressione enter, se o comando estiver correto, ele efetuará o evento que você deseja, como no exemplo abaixo.
  5. Com o comando testado e validado, coloque-o no código do seu robô

3 – Limpe o browser

Utilize os recursos do chromeOptions ou firefoxOptions para limpar completamente o seu browser antes de utilizá-lo. Desative extensões desnecessárias, deixe o caminho de downloads pré-configurado caso seu robô utilize-o, desabilite o carregamento de imagens, e mantenha o modo anônimo para evitar o carregamento de informações do usuário.

Este procedimento fará com que seu navegador trabalhe de modo mais performático para sua automação. As configurações serão aplicadas somente para a instância utilizada do chromedriver, nada afetará as configurações padrões do navegador em seu uso pessoal.

Crie uma classe e método separado somente para as configurações do chromeOptions, e se possível, parametrize algumas opções (como modo headless) através de um arquivo de configurações externo do robô. Esta ação permitirá a troca desses parâmetros sem necessidade de alteração no código quando o mesmo estiver em produção.

4 – Utilize waiters no lugar de sleep

Dificilmente você irá conseguir medir com precisão quanto tempo o sistema, uma página, ou algum elemento da aplicação irá demorar para carregar. Utilizar Sleeps para aguardar o carregamento é praticamente um jogo de sorte. Sua automação sempre perderá o tempo de carregamento, ou acabará demorando acima do necessário para aguardar o objeto, gerando um enorme desperdício durante o processamento.

Utilize wait.until do selenium para a espera do carregamento, visibilidade ou disponibilidade dos elementos na tela, dessa forma seu robô não precisará esperar vários segundos pré configurados, e tomará a ação assim que o estado do objeto se encontrar como de fato você programou.

Muitas vezes o waitElements do selenium pode não funcionar de forma consistente, nestes casos, considere criar suas próprias funções personalizadas de wait. Esta não é a solução mais elegante para o problema, mas pode ser uma boa alternativa caso esteja sem mais opções.

o catch sem tratamento se deve ao fato de que o selenium “estoura” uma exceção ao não encontrar o elemento na tela, e como neste caso a exceção é esperada, o tratamento não é necessário

5 – Evite repetições desnecessárias

Faça automações eficientes evitando as repetições ou navegações desnecessárias. Crie a boa prática de armazenar informações úteis do sistema em objetos ou listas no seu código.

Para melhor entendimento, vamos utilizar novamente o exemplo de robô que captura informações do Mercado Livre. O robô precisará buscar por um produto, e entrar na página de cada um para capturar preço e quantidade de vendas.

Ao invés de abrir a página, retirar informações, voltar para a lista de produtos e entrar no próximo item, considere capturar e armazenar a URL de todos os produtos já na primeira pesquisa, posteriormente acessando cada um diretamente por sua URL.

Veja nos fluxos abaixo, o fluxo original fazendo a pesquisa utilizando apenas tela e sem nenhuma otimização, e o fluxo completamente otimizado.

Conclusão

Apesar do RPA (Robotic Process Automation) ser uma categoria de robôs que “reproduzem o comportamento humano”, este conceito não precisa ser literalmente considerado. O produto final do RPA precisa ser a performance que ele garantirá ao cliente e uma boa qualidade de sustentação.

Conforme dito no início, somente a performance trará os benefícios que uma automação de processos necessita para aprimorar a empresa. Nada adianta entregar robôs em pouco tempo, se estes vão processar as informações com o mesmo desempenho de um ser humano, a ideia do RPA não é somente retirar pessoas de tarefas onerosas, mas também otimizar o tempo de processamento. Você não conseguirá bons resultados criando robôs mais lentos do que pessoas para processar informações.

Revisão: Vitória Nogueira

Continue navegando

Continue navegando

Sobre o autor

Sobre o autor

Gustavo Riquena

Continue navegando