Os desafios do Hello World: criando meu primeiro bot com Python RPA utilizando BotCity
Tags: python, rpa, braziliandevs, botcity
Published: 2023-06-20 18:03:59

> en-us: [link](https://dev.to/botcitydev/hello-world-challenges-creating-my-first-bot-with-python-rpa-using-botcity-4ab1)

Particularmente, eu acredito que deveríamos dar mais valor ao Hello World de qualquer tecnologia nova que estivermos aprendendo. É a partir dele que damos início a uma jornada de exploração e aprendizado. E até mesmo por ser um processo de aprendizado, podemos passar por alguns erros e está tudo bem, faz parte do processo também.

Quero deixar aqui algumas dicas sobre alguns erros que você pode enfrentar nos seus primeiros passos durante a construção de um bot com Python RPA. E caso você tenha passado por algum erro que não está aqui neste artigo, fique à vontade para contribuir nos comentários, principalmente comentando a solução que você aplicou para resolver o problema, combinado?

![Gif de uma cena do desenho animado Pica Pau em que uma bruxa tenta subir numa vassoura falando "e lá vamos nós" em looping](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brrmlygpp8fpgbpc4y2i.gif)

## Antes de tudo... o Hello World

Hello World é uma brincadeira que fazemos na área de tecnologia, e talvez principalmente na parte de desenvolvimento, que seria a primeira coisa a se fazer ao aprender algo novo, para evitar o azar durante o uso dessa tal tecnologia. Por exemplo, se você estiver aprendendo Python, o "Hello World" seria mostrar essa mensagem mesmo na tela, utilizando comandos do Python. Você pode até dar uma olhada nesse meu outro artigo: [Deixando seu 'Olá, mundo' com o Python](https://dev.to/feministech/deixando-seu-ola-mundo-com-o-python-1dga).

## Como fazer meu primeiro Hello World com Python RPA utilizando BotCity

Você pode dar seus primeiros passos nesse mundo com os frameworks Open Source da BotCity. Inclusive fique à vontade para explorar a [documentação](https://documentation.botcity.dev/pt/) e começar a codar, além do [fórum](https://community.botcity.dev/) para tirar suas dúvidas com a comunidade.

## Erros comuns

### Erro '`ModuleNotFoundError`' ao tentar executar meu projeto

Esse erro costuma acontecer também com a mensagem: `No module named 'botcity'`.

Isso significa que você acabou pulando a etapa de instalação do bot ou então você fez essa etapa, mas possivelmente em ambiente diferente da que está utilizando agora.

Para solucionar, execute o seguinte comando no terminal: `pip install --upgrade -r requirements.txt`. Isso é necessário porque nesse arquivo estão todas dependências externas para seu robô. 

Essa etapa deve ser feita tanto para o BotCity Framework Desktop quanto para o BotCity Framework Web. Você pode ter mais detalhes na [documentação](https://documentation.botcity.dev/pt/tutorials/python-automations/web/#instalando-as-dependencias-do-projeto).

> **Importante:** se você utiliza ambientes virtuais para executar o seu projeto, como o `venv`, por exemplo, verifique que está utilizando a mesma versão do Python tanto para instalar as dependências que citamos, quanto para rodar o código. Isso também evitará alguns erros.

### Erro `No such file or directory: 'requirements.txt'`

Esse erro pode acontecer caso você esteja tentando corrigir o anterior. É possível que você tenha executado o comando `pip install --upgrade -r requirements.txt` dentro da pasta errada do projeto. Verifique em seu terminal a pasta em que você está.

### Erro '`OSError: [WinError 216]`'

Neste erro, a mensagem completa pode ser:
```
OSError: [WinError 216] This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher
```

E o cenário, normalmente é o seguinte: você está tentando realizar a parte de configuração de um webdriver em seu código para o seu bot web e, no caso, escolheu o browser Firefox.
```
# Setando navegador padrão para o Firefox
bot.browser = Browser.FIREFOX

# Setando o caminho do Geckodriver
bot.driver_path = "<caminho para o WebDriver>"
```

Para fazer a configuração desse webdriver, costumamos fazer o download por este [link](https://github.com/mozilla/geckodriver/releases), onde estão as releases do geckodriver. E então, identificamos o webdriver correto para o nosso sistema operacional, escolhendo um dos itens na parte de assets para download:

![Print da área de assets do link mencionado acima mostrando as diferentes versões do driver para cada sistema.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vd7u9e4zjxwnom0decmd.png)

É importante escolher com atenção, porque é comum haver confusão quando usamos, por exemplo, o sistema operacional Windows 64 bits e acabamos tentando configurar o `geckodriver-vX.YY.Z-win-aarch64.zip`. O correto seria o `geckodriver-vX.YY.Z-win64.zip`.

Ao fazer essa correção de utilizar o geckodriver com a versão correta, corrigimos o erro e você consegue abrir o navegador através do seu código, automaticamente.

### Erro de incompatibilidade do driver com o navegador

É importante também confirmar a versão do navegador que você vai utilizar e validar que o webdriver é compatível com essa versão. Utilizando novamente o Firefox como exemplo, você pode entender observando a versão ao clicar no Menu > Ajuda > Sobre o Firefox.

![Print da janela "sobre o Firefox" mostrando algumas informações sobre o navegador, uma delas a versão.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sdgvgsfd5erlnegjrzvr.png)

Ao validar a versão do seu navegador ou do navegador que será utilizado na sua automação, verifique nas informações de release do webdriver selecionado se ele é compatível com essa versão que você vai utilizar.

No exemplo que utilizamos, observamos que a versão do Firefox que eu vou utilizar na automação é 114.0.2 e na release consta a informação que a versão mínima requerida é a 113.0:

![Print do texto "Note that the minimum required Firefox version is 113.0."](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blzkwo53owiaylamey16.png)

Ou seja, nesse caso, eu conseguiria utilizar normalmente esse mesmo geckodriver na minha automação, visto que é compatível.

### Erros quando os sistemas barram a utilização por identificar um robô
Em casos assim, pode ser possível tentar humanizar o processo. O que isso significa? Você pode tentar fazer movimentações com o mouse na tela, como uma pessoa poderia fazer. Ou ainda ajustar a digitação para que não seja um conteúdo diretamente colado no campo a ser preenchido.

Esse tipo de problema costuma acontecer mais em projetos de automações Web. Mas para "humanizar" a execução, você pode recorrer a alguns recursos do framework desktop da BotCity, essa pode ser uma boa alternativa. Abaixo, seguem os exemplos dos comandos que você pode utilizar:

Sobre a digitação, você pode usar o seguinte comando do framework BotCity (veja mais exemplos em nossa [documentação](https://documentation.botcity.dev/frameworks/desktop/keyboard/)):

```python
bot.kb_type("Coloque seu texto aqui.")
```

Sobre a movimentação do cursor do mouse, você pode usar os seguintes comandos do framework BotCity (veja mais exemplos em nossa [documentação](https://documentation.botcity.dev/frameworks/desktop/mouse/)):

```python
bot.mouse_move(x=100, y=200) # x e y são coordenadas
```

### Erros quando a execução do robô é muito mais rápida que os sistemas que está acessando

Como estamos criando automações para serem executadas com código, esse tempo de execução pode ser muito mais rápido que o esperado ou que os sistemas que estamos interagindo conseguem lidar.

E por causa disso, erros de execução podem acontecer, porque determinada etapa na tela ainda não finalizou para que o próximo passo aconteça dentro do processo.

Em ocasiões assim, talvez faça sentido avaliar a possibilidade de colocar pausas entre algumas dessas etapas.

Uma forma de fazer isso com o nosso framework da BotCity seria (veja outros exemplos na [documentação](https://documentation.botcity.dev/frameworks/desktop/waits/)):

```python
# Aguardar por cinco segundos.
bot.wait(5000)
```

Além disso, você também pode criar lógicas ou regras em seu código para garantir que o robô está na tela certa antes de executar determinado comando. Uma das formas de fazer isso, seria utilizar a visão computacional e buscar por alguma âncora na tela que deveria estar aberta e em uso.

### Erro na precisão de encontrar elementos na tela

Esse problema pode acontecer por alguns motivos:
- Você desenvolveu o robô em um ambiente diferente do que será executado em produção;
- A resolução da tela alterou.

Para amenizar ou evitar que esse problema continue acontecendo:
- Tente possibilitar que você faça o desenvolvimento da automação em ambiente e resolução o mais próximo possível de como será executado em produção;
- Outra saída é fazer um ajuste em relação a acurácia do algoritmo de visão computacional no código gerado.

Veja no exemplo do código a seguir gerado pela visão computacional:

```python
    if not bot.find("window", matching=0.97, waiting_time=10000):
        not_found("window")
    bot.click_relative(221, 206)
```

O parâmetro `matching` costuma estar com o valor máximo 0.97. Esse valor poderia ser ajustado a, no mínimo, 0.90. Isso pode ajudar nas questões levantadas neste tópico. Mas cuidado para não diminuir muito mais que isso, a ponto do algoritmo perder a sua eficiência para encontrar o elemento que precisa ser identificado.

### Erro `unable to find valid certification path to requested target` ao tentar executar o BotCity Studio

Este erro pode acontecer em seu ambiente caso existam bloqueios configurados de certificados. Uma das saídas é fazer o seguinte passo-a-passo:

- Abra a pasta do SDK. No wizard isso pode ser feito clicando em "Open SDK folder";
- Acesse a pasta conf e abra o arquivo conf.bcf em modo de edição (você pode fazer isso, abrindo com o bloco de notas, por exemplo);
- Adicione a linha ignoreSSL=true e não esqueça de salvar essa alteração no arquivo conf.bcf;
- Reinicie o BotCity Studio e o problema deve estar resolvido.

---

## Sobre os erros quando começamos

É importante entender que alguns erros podem, de fato, acontecer. E isso não é um impedimento para o seu aprendizado, pelo contrário. Entender o erro, ler a mensagem com calma, pesquisar, tirar dúvidas com a comunidade e resolver esse problema é o que vai te trazer ainda mais conhecimento.

Então relaxe, aproveite essa viagem e desbrave o universo RPA com muito Python e Open Source.

---

Que tal você fazer o seu Hello World e nos contar quais foram os desafios que isso lhe trouxe? Vamos compartilhar nossas experiências e conhecimento com a comunidade.

E se quiser uma inspiração sobre o que construir para continuar seus aprendizados, dá uma olhada em nosso [repositório de bots](https://repository.botcity.dev/), onde a galera da comunidade compartilha seus projetos Open Source para troca de conhecimento e experiências.