{"id":6207,"date":"2023-09-20T18:50:17","date_gmt":"2023-09-20T21:50:17","guid":{"rendered":"https:\/\/blog.botcity.dev\/?p=6207"},"modified":"2024-01-19T11:04:39","modified_gmt":"2024-01-19T14:04:39","slug":"construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop","status":"publish","type":"post","link":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/","title":{"rendered":"Construindo um bot com Python RPA para interagir com sistemas desktop"},"content":{"rendered":"<p>Voc\u00ea j\u00e1 deve conhecer ferramentas e frameworks que podem te ajudar a construir automa\u00e7\u00f5es para interagir com sistemas Web. Mas e quando se trata de <span class=\"notion-enable-hover\" data-token-index=\"1\">sistemas desktop<\/span>, como voc\u00ea faz? Vim te mostrar como utilizar o framework Open Source da <a class=\"notion-link-token notion-focusable-token notion-enable-hover\" tabindex=\"0\" href=\"https:\/\/botcity.dev\/\" rel=\"noopener noreferrer\" data-token-index=\"3\"><span class=\"link-annotation-unknown-block-id--2027239483\">BotCity<\/span><\/a> com diversas funcionalidades para voc\u00ea construir a sua automa\u00e7\u00e3o com Python RPA.<\/p>\n<h2>Preparando o ambiente de desenvolvimento<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.botcity.dev\/signup\">Crie a sua conta gratuita<\/a> na plataforma da BotCity;<\/li>\n<li>Acompanhe o passo a passo da instala\u00e7\u00e3o nas orienta\u00e7\u00f5es da documenta\u00e7\u00e3o de <a href=\"https:\/\/documentation.botcity.dev\/pt\/getting-started\/prerequisites\/\">pr\u00e9-requisitos<\/a> e da <a href=\"https:\/\/documentation.botcity.dev\/pt\/getting-started\/botcity-studio-sdk\/\">instala\u00e7\u00e3o do SDK BotCity Studio<\/a>;<\/li>\n<li>Instale o <a href=\"https:\/\/drive.google.com\/drive\/folders\/1gpmqV3l0VuLEg1d8kOFFFpzq2gopq66U?usp=sharing\">Sicalc<\/a> (caso queira seguir o tutorial com o mesmo programa de exemplo utilizado).\n<ul>\n<li>o Sicalc desktop \u00e9 utilizado de maneira offline, ent\u00e3o n\u00e3o ser\u00e1 gerada uma Nota Fiscal v\u00e1lida;<\/li>\n<li>o Sicalc funciona para sistema operacional Windows, contudo todo o processo e uso do framework pode ser aplicado tamb\u00e9m para distribui\u00e7\u00f5es Linux e MacOS sem problemas;<\/li>\n<li>ao abrir o Sicalc pela primeira vez, ser\u00e1 solicitado um c\u00f3digo de munic\u00edpio. Para o nosso exemplo, vamos colocar o 7107 que representa S\u00e3o Paulo, mas poderia ser qualquer outro.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Primeiros passos do desenvolvimento do nosso rob\u00f4<\/h2>\n<h3>Criando o projeto a partir do template da BotCity<\/h3>\n<p>No terminal do seu computador, dentro da pasta em que voc\u00ea deseja criar o projeto, execute o seguinte comando para instalarmos o pacote <a href=\"https:\/\/cookiecutter.readthedocs.io\/en\/stable\/\">cookiecutter<\/a> (porque os templates oferecidos foram criados a partir dele).<\/p>\n<p>Para instalarmos o pacote do\u00a0<code>cookiecutter<\/code>, vamos executar o seguinte comando:<\/p>\n<pre><code class=\"language-python\">python -m pip install --upgrade cookiecutter\r\n<\/code><\/pre>\n<p>Para criarmos um projeto usando o modelo, vamos invocar o\u00a0<code>cookiecutter<\/code>\u00a0e fornecer como argumento a URL do reposit\u00f3rio onde os templates da BotCity est\u00e3o localizados:<\/p>\n<pre><code class=\"language-python\">python -m cookiecutter &lt;https:\/\/github.com\/botcity-dev\/bot-python-template\/archive\/v2.zip&gt;\r\n<\/code><\/pre>\n<p>Durante a execu\u00e7\u00e3o deste comando, voc\u00ea precisar\u00e1 informar duas coisas:<\/p>\n<ul>\n<li><strong>project_type:<\/strong> refere-se ao tipo de projeto que deseja criar. O template fornecer\u00e1 algumas op\u00e7\u00f5es, mas neste caso, vamos escolher o n\u00famero 1, pois vamos construir um bot Desktop;<\/li>\n<li><strong>bot_id:<\/strong> refere-se a uma identifica\u00e7\u00e3o que voc\u00ea deseja dar para o seu projeto. Neste exemplo, chamaremos de bot-sicalc.<\/li>\n<\/ul>\n<p>Ap\u00f3s o t\u00e9rmino do processo acima, uma nova pasta chamada\u00a0<code>bot-sicalc<\/code>\u00a0estar\u00e1 dispon\u00edvel. Voc\u00ea pode entender um pouco mais sobre a estrutura e como ele funciona com as orienta\u00e7\u00f5es na documenta\u00e7\u00e3o.<\/p>\n<h3>Instalando as depend\u00eancias do seu projeto<\/h3>\n<p>Normalmente, projetos de desenvolvimento podem ter depend\u00eancias como os frameworks utilizados, pacotes importantes, entre outros. O nosso tamb\u00e9m tem depend\u00eancias e voc\u00ea poder\u00e1 identific\u00e1-las no arquivo <code>requirements.txt<\/code>. Voc\u00ea notar\u00e1 que h\u00e1 pelo menos essas duas:<\/p>\n<pre><code class=\"language-powershell\">botcity-framework-core # framework de desenvolvimento da automa\u00e7\u00e3o\r\nbotcity-maestro-sdk # API do BotCity Maestro para orquestra\u00e7\u00e3o da automa\u00e7\u00e3o\r\n\r\n<\/code><\/pre>\n<p>Antes de rodar o seu projeto, \u00e9 importante fazermos a instala\u00e7\u00e3o dessas depend\u00eancias. E para isso, devemos executar o seguinte comando:<\/p>\n<pre><code class=\"language-powershell\">pip install --upgrade -r requirements.txt\r\n<\/code><\/pre>\n<h2>Primeira execu\u00e7\u00e3o do nosso rob\u00f4<\/h2>\n<p>Se voc\u00ea entrar no arquivo \u201c<a href=\"http:\/\/bot.py\/\">bot.py<\/a>\u201d, perceber\u00e1 que j\u00e1 temos um c\u00f3digo pr\u00e9-pronto e alguns coment\u00e1rios com orienta\u00e7\u00f5es importantes sobre como fazer alguns dos pr\u00f3ximos passos.<\/p>\n<h3>Entenda o que o c\u00f3digo est\u00e1 fazendo<\/h3>\n<p>Identifique as linhas com os comandos abaixo. Elas est\u00e3o importando as bibliotecas que mencionamos do arquivo <code>requirements.txt<\/code> para que consiga utiliz\u00e1-las no seu c\u00f3digo.<\/p>\n<pre><code class=\"language-python\">from botcity.core import DesktopBot\r\nfrom botcity.maestro import *\r\n\r\n<\/code><\/pre>\n<p>E nas linhas abaixo, estamos criando um objeto para o bot com o framework Desktop e pedindo para ele abrir um navegador no site da BotCity.<\/p>\n<pre><code class=\"language-python\">bot = DesktopBot()\r\nbot.browse(\"&lt;http:\/\/www.botcity.dev&gt;\")\r\n\r\n<\/code><\/pre>\n<h3>Execute o rob\u00f4<\/h3>\n<p>Para ver o rob\u00f4 sendo executado, voc\u00ea pode fazer isso pela IDE que estiver utilizando ou na linha de comando com o seguinte:<\/p>\n<pre><code class=\"language-python\">python bot.py\r\n<\/code><\/pre>\n<p>Deu certo? Abriu o navegador do seu computador com o site da BotCity? Aqui est\u00e1 um exemplo de qual seria o resultado esperado ap\u00f3s essa execu\u00e7\u00e3o:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6269\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-5-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1.png\" data-orig-size=\"2000,1066\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print tela inicial do site da BotCity\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1-1024x546.png\" class=\"alignnone wp-image-6269 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1.png\" alt=\"Print da tela inicial do site da BotCity.\" width=\"2000\" height=\"1066\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1-300x160.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1-1024x546.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1-1536x819.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-5-1-1200x640.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>\ud83d\udca1 Uma dica interessante \u00e9 voc\u00ea testar se o que est\u00e1 acontecendo \u00e9 o esperado. Tente fazer essa pr\u00e1tica de testar aos poucos para voc\u00ea entender o que est\u00e1 acontecendo. Isso tamb\u00e9m facilitar\u00e1 no entendimento caso algum erro ocorra.<\/p>\n<h3>Como lidar com os erros<\/h3>\n<p>Caso n\u00e3o tenha funcionado de primeira, n\u00e3o se preocupe. \u00c9 normal voc\u00ea passar por alguns erros quando est\u00e1 desenvolvendo algo pela primeira vez ou aprendendo algo do zero. Te convido a acompanhar este <a href=\"https:\/\/dev.to\/botcitydev\/os-desafios-do-hello-world-criando-meu-primeiro-bot-com-python-rpa-utilizando-botcity-1a0p\">post sobre alguns erros<\/a> que podem acontecer e te encorajar a compartilhar os erros que voc\u00ea teve e como os resolveu.<\/p>\n<p>Caso esteja com alguma outra dificuldade no desenvolvimento, fique \u00e0 vontade para entrar em nosso <a href=\"https:\/\/community.botcity.dev\/\">f\u00f3rum<\/a> ou em nossa <a href=\"https:\/\/join.slack.com\/t\/communitybotcitydev\/shared_invite\/zt-1yvjzlce9-esRSoWfAIXPse4L21bzjAQ\">comunidade no slack<\/a> para pedir ajuda e tirar suas d\u00favidas.<\/p>\n<h2>Conhecendo o processo<\/h2>\n<p>O objetivo desta automa\u00e7\u00e3o ser\u00e1 de gerar uma DARF com o Sicalc. \u00c9 sempre bom entender o processo antes de come\u00e7ar a codificar o seu rob\u00f4. Ent\u00e3o vamos verificar como seria, caso uma pessoa fosse gerar a DARF manualmente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6267\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/processo-manual-sicalc-2\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/processo-manual-sicalc-1.gif\" data-orig-size=\"1920,1080\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"processo manual sicalc\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/processo-manual-sicalc-1-1024x576.gif\" class=\"alignnone wp-image-6267 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/processo-manual-sicalc-1.gif\" alt=\"Gif do processo manual de cria\u00e7\u00e3o de DARF pelo sistema Sicalc. Todo o processo \u00e9 explicado passo a passo no decorrer deste tutorial para replicar as a\u00e7\u00f5es com o rob\u00f4 que ser\u00e1 constru\u00eddo.\" width=\"1920\" height=\"1080\" \/><\/p>\n<h2>Desenvolvendo o rob\u00f4 desktop<\/h2>\n<p>Para esse desenvolvimento, vamos utilizar o BotCity Studio, que atrav\u00e9s de vis\u00e3o computacional, nos ajudar\u00e1 com o mapeamento dos itens na tela do sistema utilizado para que nosso rob\u00f4 possa interagir com ele.<\/p>\n<h3>Carregando o projeto BotSicalc no BotCity Studio<\/h3>\n<p>Mantenha a sua IDE aberta com o seu projeto. Abra tamb\u00e9m o BotCity Studio e, no menu superior, escolha a op\u00e7\u00e3o \u201cFile\u201d e, em seguida, \u201cLoad Project\u201d.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6235\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/1-2\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/1.png\" data-orig-size=\"103,160\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print do menu file aberto dentro do BotCity Studio mostrando a op\u00e7\u00e3o &amp;#8220;load project&amp;#8221; em destaque\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/1.png\" class=\"aligncenter wp-image-6235 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/1.png\" alt=\"print do menu file aberto dentro do BotCity Studio mostrando a op\u00e7\u00e3o &quot;load project&quot; em destaque\" width=\"103\" height=\"160\" \/><\/p>\n<p>Uma nova janela se abrir\u00e1 e, nela, voc\u00ea dever\u00e1 clicar em \u201cbrowse\u201d e identificar onde est\u00e1 a pasta do seu projeto.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6237\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/2-2\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/2.png\" data-orig-size=\"420,147\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da janela &amp;#8220;load project&amp;#8221; aberta\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/2.png\" class=\"aligncenter wp-image-6237 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/2.png\" alt=\"print da janela &quot;load project&quot; aberta\" width=\"420\" height=\"147\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/2.png 420w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/2-300x105.png 300w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><\/p>\n<p>Em seguida, identifique o arquivo com extens\u00e3o .botproj. Selecione este arquivo para o BotCity Studio carregar o seu projeto. No caso deste exemplo, o arquivo ser\u00e1 \u201cbot-sicalc.botproj\u201d. Ap\u00f3s isso, clique em \u201cOpen\u201d e, em seguida, \u201cLaunch\u201d. Pronto, voc\u00ea j\u00e1 tem seu projeto carregado no BotCity Studio.<\/p>\n<h3>Prosseguindo no desenvolvimento<\/h3>\n<p>Para os pr\u00f3ximos passos, vamos manter as duas ferramentas abertas, a sua IDE e o BotCity Studio, para que os c\u00f3digos sejam sincronizados em ambas as plataformas.<\/p>\n<p>At\u00e9 este momento, mantivemos apenas o seguinte c\u00f3digo no meu arquivo \u201c<a href=\"http:\/\/bot.py\">bot.py<\/a>\u201d. Perceba que deletamos a linha <code>bot.browse(\"&lt;http:\/\/www.botcity.dev&gt;\")<\/code>, pois ela n\u00e3o ser\u00e1 mais necess\u00e1ria.<\/p>\n<pre><code class=\"language-python\"># Import for the Desktop Bot\r\nfrom botcity.core import DesktopBot\r\n\r\n# Import for integration with BotCity Maestro SDK\r\nfrom botcity.maestro import *\r\n\r\n# Disable errors if we are not connected to Maestro\r\nBotMaestroSDK.RAISE_NOT_CONNECTED = False\r\n\r\ndef main():\r\n\r\n    bot = DesktopBot()\r\n        \r\n\r\ndef not_found(label):\r\n    print(f\"Element not found: {label}\")\r\n\r\nif __name__ == '__main__':\r\n    main()\r\n<\/code><\/pre>\n<p>Ao salvar esse c\u00f3digo na minha IDE, ao clicar novamente no BotCity Studio, voc\u00ea perceber\u00e1 que tamb\u00e9m foi atualizado.<\/p>\n<p>Abaixo da linha <code>bot = DesktopBot()<\/code>, vamos adicionar o comando execute para o rob\u00f4 abrir o Sicalc, conforme c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-python\">bot.execute(r\"C:\\\\Program Files (x86)\\\\Programas RFB\\\\Sicalc Auto Atendimento\\\\SicalcAA.exe\")\r\n<\/code><\/pre>\n<p>Uma dica interessante \u00e9 voc\u00ea testar se o que est\u00e1 acontecendo \u00e9 o esperado. Neste momento, por exemplo, podemos salvar o c\u00f3digo e <strong>executar o rob\u00f4 pela IDE<\/strong> para verificarmos se, de fato, o comando funcionar\u00e1. Tente fazer essa pr\u00e1tica de testar aos poucos para voc\u00ea entender o que est\u00e1 acontecendo. Isso tamb\u00e9m facilitar\u00e1 no entendimento caso algum erro ocorra.<\/p>\n<p>Se essa etapa funcionar, o rob\u00f4 executar\u00e1 e o Sicalc ficar\u00e1 nessa tela:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6276\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/untitled-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1.png\" data-orig-size=\"1600,848\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela inicial do sicalc aberta\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1-1024x543.png\" class=\"aligncenter wp-image-6276 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1.png\" alt=\"print da tela inicial do sicalc aberta\" width=\"1600\" height=\"848\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1.png 1600w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1-300x159.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1-1024x543.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1-1536x814.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Untitled-1-1200x636.png 1200w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/p>\n<p>\ud83d\udca1 Antes de seguir em frente, lembre-se de deixar o cursor logo abaixo da linha de c\u00f3digo que o bot abre o Sicalc no BotCity Studio. Isso \u00e9 porque ele vai come\u00e7ar a gerar c\u00f3digo para voc\u00ea utilizar em seu projeto. E o c\u00f3digo ser\u00e1 adicionado exatamente onde o cursor estiver posicionado.<\/p>\n<h3>Identificando pop-up da tela inicial<\/h3>\n<p>Ao executarmos o aplicativo Sicalc pela primeira vez, ser\u00e1 exibido um pop-up contendo um aviso. A tarefa ser\u00e1 identificarmos essa janela e fech\u00e1-la logo em seguida.<\/p>\n<p>A estrat\u00e9gia que vamos utilizar \u00e9 procurar por uma \u00e2ncora e realizar um clique relativo no bot\u00e3o\u00a0<strong>Continuar<\/strong>.<\/p>\n<p>Voltando ao BotCity Studio, no arquivo\u00a0<code>bot.py<\/code>\u00a0posicionamos o cursor na linha onde o c\u00f3digo deve ser gerado.<\/p>\n<p>Na aba\u00a0<code>UI<\/code>, clicamos pr\u00f3ximo ao elemento que queremos identificar e a ferramenta dar\u00e1 um zoom para selecionarmos o elemento. A sele\u00e7\u00e3o do nosso recorte \u00e9 feita com o mouse, clicando e arrastando at\u00e9 selecionar dessa maneira:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6280\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-6-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1.png\" data-orig-size=\"2000,1082\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela esclarecimento ao contribuinte e a janela solicitando as informa\u00e7\u00f5es de nome, a\u00e7\u00e3o e modo\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1-1024x554.png\" class=\"aligncenter wp-image-6280 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1.png\" alt=\"print da tela esclarecimento ao contribuinte e a janela solicitando as informa\u00e7\u00f5es de nome, a\u00e7\u00e3o e modo\" width=\"2000\" height=\"1082\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1-300x162.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1-1024x554.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1-1536x831.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-6-1-1200x649.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>\ud83d\udca1 Se o zoom n\u00e3o estiver adequado para voc\u00ea fazer a sele\u00e7\u00e3o necess\u00e1ria, basta pressionar a tecla <code>esc<\/code>\u00a0no seu teclado e refazer o clique pr\u00f3ximo ao elemento.<\/p>\n<p>Ap\u00f3s selecionado, vamos preencher os campos\u00a0<code>Name<\/code>\u00a0com o valor \u201cpopup-esclarecimento\u201d e\u00a0<code>Action<\/code>\u00a0com o valor \u201cClick_relative\u201d. O campo \u201cmode\u201d deve ser mantido com a op\u00e7\u00e3o \u201cImage\u201d selecionada. Em seguida, clicamos no bot\u00e3o\u00a0<strong>Submit<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6284\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-7-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1.png\" data-orig-size=\"2000,1149\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela para preenchimento de nome e a\u00e7\u00e3o\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-1024x588.png\" class=\"size-medium wp-image-6284 aligncenter\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-300x172.png\" alt=\"print da tela para preenchimento de nome e a\u00e7\u00e3o \" width=\"300\" height=\"172\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-300x172.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-1024x588.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-1536x882.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-1200x689.png 1200w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-7-1-900x515.png?crop=1 900w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Ap\u00f3s clicar em Submit, ao arrastar o mouse, voc\u00ea perceber\u00e1 que uma linha vermelha acompanhar\u00e1 o movimento. N\u00f3s devemos dizer para o BotCity Studio onde dever\u00e1 ser o clique relativo. Neste caso, ser\u00e1 o bot\u00e3o \u201cContinuar\u201d. Ent\u00e3o arrastamos o cursor do mouse at\u00e9 esse bot\u00e3o e clicamos nele.<\/p>\n<p>Com essa etapa conclu\u00edda, o seguinte trecho de c\u00f3digo ser\u00e1 gerado pelo BotCity Studio:<\/p>\n<pre><code class=\"language-python\"># Abre o aplicativo do SiCalc\r\nbot.execute(path_sicalc)\r\n\r\nif not bot.find( \"popup-esclarecimento\", matching=0.97, waiting_time=10000):\r\n    not_found(\"popup-esclarecimento\")\r\nbot.click_relative(195, 211)\r\n<\/code><\/pre>\n<p>Lembre-se de salvar o c\u00f3digo no BotCity Studio, que pode ser pelo atalho \u201cctrl + s\u201d. Isso far\u00e1 com que a sua IDE tamb\u00e9m seja atualizada com o novo c\u00f3digo gerado.<\/p>\n<p>Ao rodarmos novamente esse c\u00f3digo pela IDE, depois de abrir o aplicativo Sicalc, o bot realizar\u00e1 o clique relativo no elemento que foi selecionado acima. A partir disso, conseguimos continuar o processo de preenchimento da DARF.<\/p>\n<h3>Selecionando op\u00e7\u00f5es do menu<\/h3>\n<p>No aplicativo do Sicalc, precisaremos acessar a op\u00e7\u00e3o\u00a0<strong>Fun\u00e7\u00f5es<\/strong> do menu e, em seguida, a op\u00e7\u00e3o <strong>Preenchimento de DARF<\/strong>. Ent\u00e3o devemos tirar um novo print da tela do Sicalc e, no BotCity Studio, podemos fazer o recorte desses elementos.<\/p>\n<p>Vamos come\u00e7ar pelo item \u201cFun\u00e7\u00f5es\u201d. E para essa op\u00e7\u00e3o, vamos dar o nome <code>funcoes<\/code> e a action ser\u00e1 <code>click<\/code>. A op\u00e7\u00e3o mode deve continuar como <code>image<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6286\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-8-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1.png\" data-orig-size=\"2000,820\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print mostrando em destaque a parte de fun\u00e7\u00f5es selecionada com nome e a\u00e7\u00e3o preenchidos conforme texto do tutorial\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1-1024x420.png\" class=\"aligncenter wp-image-6286 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1.png\" alt=\"print mostrando em destaque a parte de fun\u00e7\u00f5es selecionada com nome e a\u00e7\u00e3o preenchidos conforme texto do tutorial\" width=\"2000\" height=\"820\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1-300x123.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1-1024x420.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1-1536x630.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-8-1-1200x492.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Com o sub-menu de op\u00e7\u00f5es de Fun\u00e7\u00f5es aberto, vamos tirar um novo print para fazermos a sele\u00e7\u00e3o e a\u00e7\u00e3o\u00a0<code>Click<\/code>\u00a0na op\u00e7\u00e3o\u00a0<strong>Preenchimento de DARF<\/strong>, chamando-a de <code>preenchimento-darf<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6290\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-9-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1.png\" data-orig-size=\"2000,959\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print mostrando em destaque a parte de preenchimento de DARF selecionada\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1-1024x491.png\" class=\"aligncenter wp-image-6290 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1.png\" alt=\"print mostrando em destaque a parte de preenchimento de DARF selecionada\" width=\"2000\" height=\"959\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1-300x144.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1-1024x491.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1-1536x737.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-9-1-1200x575.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>O c\u00f3digo gerado pelo BotCity Studio ser\u00e1 parecido com o c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-python\">if not bot.find( \"funcoes\", matching=0.97, waiting_time=10000):\r\n    not_found(\"funcoes\")\r\nbot.click()\r\n\r\nif not bot.find( \"preenchimento-darf\", matching=0.97, waiting_time=10000):\r\n    not_found(\"preenchimento-darf\")\r\nbot.click()\r\n<\/code><\/pre>\n<h3>Preenchendo do formul\u00e1rio inicial<\/h3>\n<p>Ap\u00f3s a etapa anterior, ser\u00e1 aberto um formul\u00e1rio inicial onde precisaremos preencher somente o c\u00f3digo da receita.<\/p>\n<p>Novamente, vamos tirar um novo print da tela atualizada para fazermos a sele\u00e7\u00e3o do elemento correto no BotCity Studio.<\/p>\n<p>Nesse caso, vamos encontrar a \u00e2ncora do input\u00a0<strong>C\u00f3d. Receita<\/strong>\u00a0e fazer um clique relativo dentro do campo, que fica logo na frente para ser preenchido:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6293\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-10-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1.png\" data-orig-size=\"2000,765\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print com a tela em destaque para a parte de c\u00f3digo da receira selecionada e a janela para preenchimento de nome e a\u00e7\u00e3o\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1-1024x392.png\" class=\"aligncenter wp-image-6293 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1.png\" alt=\"print com a tela em destaque para a parte de c\u00f3digo da receira selecionada e a janela para preenchimento de nome e a\u00e7\u00e3o\" width=\"2000\" height=\"765\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1-300x115.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1-1024x392.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1-1536x588.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-10-1-1200x459.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Ap\u00f3s encontrar e clicar no campo referente a esse elemento, utilizamos o comando\u00a0<code>paste()<\/code>\u00a0para inserir nosso dado. Em seguida vamos utilizar o comando\u00a0<code>tab()<\/code>\u00a0para avan\u00e7armos para o pr\u00f3ximo formul\u00e1rio.<\/p>\n<p>Voc\u00ea pode adicionar o c\u00f3digo com o comando <code>paste()<\/code> e com o comando <code>tab()<\/code> diretamente no BotCity Studio e salvar para atualizar na sua IDE, ou adicionar diretamente pela IDE. Apenas lembre-se de salvar o c\u00f3digo para ambas as ferramentas seguirem atualizadas.<\/p>\n<p>Abaixo, o exemplo de como poder\u00e1 ficar esse trecho do c\u00f3digo:<\/p>\n<pre><code class=\"language-python\">if not bot.find( \"codigo-receita\", matching=0.97, waiting_time=10000):\r\n    not_found(\"codigo-receita\")\r\nbot.click_relative(128, 10)\r\n\r\n# Inserindo no campo um c\u00f3digo fict\u00edcio\r\nbot.paste(\"5629\")\r\n\r\n# Tecla \"tab\" avan\u00e7a para o pr\u00f3ximo formul\u00e1rio\r\nbot.tab()\r\n<\/code><\/pre>\n<h3>Preenchendo os dados da DARF<\/h3>\n<p>Ao executarmos o c\u00f3digo acima, ser\u00e1 aberto um segundo formul\u00e1rio. E nele, devemos inserir os demais dados da DARF. Neste momento, a tela ser\u00e1 parecida com essa:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6296\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-11-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1.png\" data-orig-size=\"2000,1079\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela do sicalc para preenchimento de informa\u00e7\u00f5es conforme descrito no tutorial\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1-1024x552.png\" class=\"aligncenter wp-image-6296 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1.png\" alt=\"print da tela do sicalc para preenchimento de informa\u00e7\u00f5es conforme descrito no tutorial\" width=\"2000\" height=\"1079\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1-300x162.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1-1024x552.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1-1536x829.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-11-1-1200x647.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Atualizando o print da tela no BotCity Studio, vamos precisar encontrar os elementos referentes ao per\u00edodo de apura\u00e7\u00e3o (campo\u00a0<span class=\"notion-enable-hover\" data-token-index=\"1\">PA<\/span>)\u00a0e ao valor do documento\u00a0(campo <span class=\"notion-enable-hover\" data-token-index=\"3\">Valor em Reais<\/span>)\u00a0e fazer um clique relativo nos seus respectivos campos:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6301\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-12-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1.png\" data-orig-size=\"2000,847\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela do sicalc com destaque no campo valor em reais\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1-1024x434.png\" class=\"aligncenter wp-image-6301 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1.png\" alt=\"print da tela do sicalc com destaque no campo valor em reais\" width=\"2000\" height=\"847\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1-300x127.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1-1024x434.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1-1536x650.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-12-1-1200x508.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/> <img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6299\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-13-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1.png\" data-orig-size=\"2000,704\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela do sicalc com destaque no campo PA\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1-1024x360.png\" class=\"aligncenter wp-image-6299 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1.png\" alt=\"print da tela do sicalc com destaque no campo PA\" width=\"2000\" height=\"704\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1-300x106.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1-1024x360.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1-1536x541.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-13-1-1200x422.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>E da mesma forma que fizemos anteriormente, vamos utilizar o comando <code>paste()<\/code> do framework para nos ajudar a digitar o valor dentro dos campos que estamos preenchendo neste momento. Perceba como o c\u00f3digo ficar\u00e1 nessa etapa:<\/p>\n<pre><code class=\"language-python\">if not bot.find( \"periodo-apuracao\", matching=0.97, waiting_time=10000):\r\n    not_found(\"periodo-apuracao\")\r\nbot.click_relative(15, 25)\r\n# Inserindo PA\r\nbot.paste(\"310120\")\r\n\r\nif not bot.find( \"valor\", matching=0.97, waiting_time=10000):\r\n    not_found(\"valor\")\r\nbot.click_relative(17, 27)\r\n# Inserindo valor\r\nbot.paste(\"10000\")\r\n<\/code><\/pre>\n<p>O pr\u00f3ximo passo \u00e9 clicarmos no bot\u00e3o\u00a0<strong>Calcular<\/strong>, para conseguirmos acessar o formul\u00e1rio final. Temos duas formas de resolver essa etapa. A primeira delas seria adicionar o comando <code>enter()<\/code>, pois essa a\u00e7\u00e3o no teclado de apertar a tecla enter, ap\u00f3s o preenchimento dos campos, aciona o bot\u00e3o Calcular.<\/p>\n<pre><code class=\"language-python\">bot.enter()\r\n<\/code><\/pre>\n<p>Outra forma \u00e9 seguir pela vis\u00e3o computacional e apoio do BotCity Studio. Ent\u00e3o tiramos um novo print, selecionamos o bot\u00e3o <strong>Calcular<\/strong> e informamos que a a\u00e7\u00e3o dever\u00e1 ser a de <code>click<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6315\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-14-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1.png\" data-orig-size=\"2000,849\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela do sicalc com destaque no bot\u00e3o calcular e a janela para preencher o nome do bot\u00e3o e a a\u00e7\u00e3o de clique\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1-1024x435.png\" class=\"aligncenter wp-image-6315 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1.png\" alt=\"print da tela do sicalc com destaque no bot\u00e3o calcular e a janela para preencher o nome do bot\u00e3o e a a\u00e7\u00e3o de clique\" width=\"2000\" height=\"849\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1-300x127.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1-1024x435.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1-1536x652.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-14-1-1200x509.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<pre><code class=\"language-python\">if not bot.find( \"calcular\", matching=0.97, waiting_time=10000):\r\n    not_found(\"calcular\")\r\nbot.click()\r\n<\/code><\/pre>\n<h3>Preenchendo formul\u00e1rio final<\/h3>\n<p>Ap\u00f3s o processo de c\u00e1lculo ser finalizado, precisamos acessar o formul\u00e1rio final. Para isso, vamos clicar no bot\u00e3o\u00a0<strong>DARF<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6313\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-15-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1.png\" data-orig-size=\"2000,914\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print sicalc com destaque onde est\u00e1 o bot\u00e3o DARF e a janela para preencher o nome e a\u00e7\u00e3o para o bot\u00e3o\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1-1024x468.png\" class=\"aligncenter wp-image-6313 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1.png\" alt=\"print sicalc com destaque onde est\u00e1 o bot\u00e3o DARF e a janela para preencher o nome e a\u00e7\u00e3o para o bot\u00e3o\" width=\"2000\" height=\"914\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1-300x137.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1-1024x468.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1-1536x702.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-15-1-1200x548.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<pre><code class=\"language-python\">if not bot.find( \"botao-darf\", matching=0.97, waiting_time=10000):\r\n    not_found(\"botao-darf\")\r\nbot.click()\r\n<\/code><\/pre>\n<p>Com o formul\u00e1rio final aberto, vamos atualizar o print da tela no BotCity Studio para fazermos a sele\u00e7\u00e3o dos \u00faltimos elementos:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6309\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-16-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1.png\" data-orig-size=\"2000,1079\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print do sicalc mostrando o calculo feito e a janela para preencher nome, telefone e outros dados\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1-1024x552.png\" class=\"aligncenter wp-image-6309 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1.png\" alt=\"print do sicalc mostrando o calculo feito e a janela para preencher nome, telefone e outros dados\" width=\"2000\" height=\"1079\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1-300x162.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1-1024x552.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1-1536x829.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-16-1-1200x647.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Para essa etapa, vamos seguir utilizando a mesma estrat\u00e9gia das etapas anteriores, procurando pela \u00e2ncora e fazendo um clique relativo no campo que precisamos preencher.<\/p>\n<p>Os dados que precisamos preencher nesse \u00faltimo formul\u00e1rio ser\u00e3o:<\/p>\n<ul>\n<li>Nome: Petrobras<\/li>\n<li>Telefone: 1199991234<\/li>\n<li>CNPJ: 33000167000101<\/li>\n<li>Refer\u00eancia: 0<\/li>\n<\/ul>\n<p>Com todas as \u00e2ncoras mapeadas, o c\u00f3digo gerado ser\u00e1 semelhante a esse:<\/p>\n<pre><code class=\"language-python\">if not bot.find( \"nome\", matching=0.97, waiting_time=10000):\r\n    not_found(\"nome\")\r\nbot.click_relative(0, 24)\r\n\r\n# Inserindo nome no campo\r\nbot.paste(\"Petrobras\")\r\n\r\nif not bot.find( \"telefone\", matching=0.97, waiting_time=10000):\r\n    not_found(\"telefone\")\r\nbot.click_relative(1, 27)\r\n\r\n# Inserindo telefone no campo\r\nbot.paste(\"1199991234\")\r\n\r\nif not bot.find( \"cnpj\", matching=0.97, waiting_time=10000):\r\n    not_found(\"cnpj\")\r\nbot.click_relative(123, 9)\r\n\r\n# Inserindo CNPJ no campo\r\nbot.paste(\"33000167000101\")\r\n\r\nif not bot.find( \"referencia\", matching=0.97, waiting_time=10000):\r\n    not_found(\"referencia\")\r\nbot.click_relative(121, 8)\r\n\r\n# Inserindo refer\u00eancia no campo\r\nbot.paste(\"0\")\r\n<\/code><\/pre>\n<h3>Salvando o arquivo<\/h3>\n<p>O \u00faltimo passo \u00e9 salvarmos o arquivo da DARF que ser\u00e1 gerado. Ainda na tela do \u00faltimo formul\u00e1rio exibido, ap\u00f3s preencher os dados vamos clicar no bot\u00e3o\u00a0<strong>Imprimir<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6311\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-17-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1.png\" data-orig-size=\"2000,1081\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print do sicalc com o bot\u00e3o imprimir em destaque e a janela para configurar a a\u00e7\u00e3o de clique\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1-1024x553.png\" class=\"aligncenter wp-image-6311 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1.png\" alt=\"print do sicalc com o bot\u00e3o imprimir em destaque e a janela para configurar a a\u00e7\u00e3o de clique\" width=\"2000\" height=\"1081\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1-300x162.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1-1024x553.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1-1536x830.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-17-1-1200x649.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<pre><code class=\"language-python\">if not bot.find( \"imprimir\", matching=0.97, waiting_time=10000):\r\n    not_found(\"imprimir\")\r\nbot.click()\r\n<\/code><\/pre>\n<p>Clicando no bot\u00e3o, ser\u00e1 aberto a janela do gerenciador de arquivos do Windows, caso n\u00e3o tenha diretamente uma impressora configurada:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6305\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-18-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1.png\" data-orig-size=\"2000,1076\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print da tela para salvar o arquivo pdf da DARF\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1-1024x551.png\" class=\"aligncenter wp-image-6305 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1.png\" alt=\"print da tela para salvar o arquivo pdf da DARF\" width=\"2000\" height=\"1076\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1-300x161.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1-1024x551.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1-1536x826.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-18-1-1200x646.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Neste caso, vamos encontrar a refer\u00eancia dessa janela e clicar para que ela fique em foco:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"6307\" data-permalink=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/image-19-1\/\" data-orig-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1.png\" data-orig-size=\"2000,1076\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"print com zoom na tela &amp;#8220;save print output as&amp;#8221;\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1-1024x551.png\" class=\"aligncenter wp-image-6307 size-full\" src=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1.png\" alt=\"print com zoom na tela &quot;save print output as&quot;\" width=\"2000\" height=\"1076\" srcset=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1.png 2000w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1-300x161.png 300w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1-1024x551.png 1024w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1-1536x826.png 1536w, https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/image-19-1-1200x646.png 1200w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/p>\n<p>Ap\u00f3s isso, podemos utilizar o\u00a0<code>paste()<\/code>\u00a0para informar qual ser\u00e1 o caminho do arquivo e o\u00a0<code>enter()<\/code>\u00a0para salvar. Abaixo temos o exemplo de como poder\u00e1 ficar o c\u00f3digo:<\/p>\n<pre><code class=\"language-python\">if not bot.find( \"janela-salvar\", matching=0.97, waiting_time=10000):\r\n    not_found(\"janela-salvar\")\r\nbot.click()\r\n\r\n# Inserindo o caminho do arquivo\r\nbot.paste(r\"C:\\\\Users\\\\username\\\\Documents\\\\DARF.pdf\")\r\nbot.enter()\r\n<\/code><\/pre>\n<h3>Finalizando o processo<\/h3>\n<p>Ap\u00f3s salvar o arquivo, nosso processo est\u00e1 finalizado!<\/p>\n<p>Podemos agora utilizar o comando\u00a0<code>wait()<\/code>\u00a0para aguardar 2 segundos e garantir que tudo foi salvo e depois o comando\u00a0<code>alt_f4()<\/code>\u00a0para fecharmos o formul\u00e1rio e a janela do Sicalc.<\/p>\n<pre><code class=\"language-python\"># Aguarda 2 segundos\r\nbot.wait(2000)\r\n\r\n# Fechando janela do formul\u00e1rio\r\nbot.alt_f4()\r\n\r\n# Fechando app do SiCalc\r\nbot.alt_f4()\r\n<\/code><\/pre>\n<p>\ud83d\udca1 Essa estrat\u00e9gia do comando <code>wait()<\/code> pode ser \u00fatil em algumas ocasi\u00f5es, quando algum processo ou comando pode levar um tempo para acontecer ou atualizar antes de ir para a pr\u00f3xima etapa do processo. Ent\u00e3o analise se no seu projeto isso pode te ajudar e utilize da maneira que for melhor para voc\u00ea.<\/p>\n<h3>C\u00f3digo final<\/h3>\n<p>Caso queira validar como o c\u00f3digo final deste tutorial poder\u00e1 ficar, segue abaixo o conte\u00fado do arquivo <span class=\"notion-enable-hover\" spellcheck=\"false\" data-token-index=\"1\">bot.py<\/span> do projeto:<\/p>\n<pre><code class=\"language-python\">def main():\r\n    bot = DesktopBot()\r\n\r\n    # Implement here your logic...\r\n    # Caminho onde est\u00e1 o execut\u00e1vel SiCalc\r\n    path_sicalc = r\"C:\\\\Program Files (x86)\\\\Programas RFB\\\\Sicalc Auto Atendimento\\\\SicalcAA.exe\"\r\n\r\n    # Abre o aplicativo do SiCalc\r\n    bot.execute(path_sicalc)\r\n\r\n    if not bot.find( \"popup-esclarecimento\", matching=0.97, waiting_time=10000):\r\n        not_found(\"popup-esclarecimento\")\r\n    bot.click_relative(195, 211)\r\n\r\n    if not bot.find( \"funcoes\", matching=0.97, waiting_time=10000):\r\n        not_found(\"funcoes\")\r\n    bot.click()\r\n\r\n    if not bot.find( \"preenchimento-darf\", matching=0.97, waiting_time=10000):\r\n        not_found(\"preenchimento-darf\")\r\n    bot.click()\r\n\r\n    if not bot.find( \"codigo-receita\", matching=0.97, waiting_time=10000):\r\n        not_found(\"codigo-receita\")\r\n    bot.click_relative(128, 10)\r\n\r\n    # Inserindo no campo um c\u00f3digo fict\u00edcio\r\n    bot.paste(\"5629\")\r\n\r\n    # Tecla \"tab\" avan\u00e7a para o pr\u00f3ximo formul\u00e1rio\r\n    bot.tab()\r\n\r\n    if not bot.find( \"periodo-apuracao\", matching=0.97, waiting_time=10000):\r\n        not_found(\"periodo-apuracao\")\r\n    bot.click_relative(15, 25)\r\n    # Inserindo PA\r\n    bot.paste(\"310120\")\r\n\r\n    if not bot.find( \"valor\", matching=0.97, waiting_time=10000):\r\n        not_found(\"valor\")\r\n    bot.click_relative(17, 27)\r\n    # Inserindo valor\r\n    bot.paste(\"10000\")\r\n\r\n    if not bot.find( \"calcular\", matching=0.97, waiting_time=10000):\r\n        not_found(\"calcular\")\r\n    bot.click()\r\n\r\n    if not bot.find( \"botao-darf\", matching=0.97, waiting_time=10000):\r\n        not_found(\"botao-darf\")\r\n    bot.click()\r\n\r\n    if not bot.find( \"nome\", matching=0.97, waiting_time=10000):\r\n        not_found(\"nome\")\r\n    bot.click_relative(0, 24)\r\n    # Inserindo nome\r\n    bot.paste(\"Petrobras\")\r\n\r\n    if not bot.find( \"telefone\", matching=0.97, waiting_time=10000):\r\n        not_found(\"telefone\")\r\n    bot.click_relative(1, 27)\r\n    # Inserindo telefone\r\n    bot.paste(\"1199991234\")\r\n\r\n    if not bot.find( \"cnpj\", matching=0.97, waiting_time=10000):\r\n        not_found(\"cnpj\")\r\n    bot.click_relative(123, 9)\r\n    # Inserindo CNPJ\r\n    bot.paste(\"33000167000101\")\r\n\r\n    if not bot.find( \"referencia\", matching=0.97, waiting_time=10000):\r\n        not_found(\"referencia\")\r\n    bot.click_relative(121, 8)\r\n    # Inserindo refer\u00eancia\r\n    bot.paste(\"0\")\r\n\r\n    if not bot.find( \"imprimir\", matching=0.97, waiting_time=10000):\r\n        not_found(\"imprimir\")\r\n    bot.click()\r\n\r\n    if not bot.find( \"janela-salvar\", matching=0.97, waiting_time=10000):\r\n        not_found(\"janela-salvar\")\r\n    bot.click()\r\n\r\n    # Inserindo path do arquivo\r\n    bot.paste(r\"C:\\\\Users\\\\username\\\\Documents\\\\DARF.pdf\")\r\n    bot.enter()\r\n\r\n    # Aguarda 2 segundos\r\n    bot.wait(2000)\r\n\r\n    # Fechando janela do formul\u00e1rio\r\n    bot.alt_f4()\r\n\r\n    # Fechando app do SiCalc\r\n    bot.alt_f4()\r\n\r\ndef not_found(label):\r\n    print(f\"Element not found: {label}\")\r\n\r\nif __name__ == '__main__':\r\n    main()\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h2>Para explorar mais comandos do framework desktop<\/h2>\n<p>Tem v\u00e1rios outros comandos que voc\u00ea pode explorar e utilizar para construir suas automa\u00e7\u00f5es desktop. Acompanhe pelo link da <a href=\"https:\/\/documentation.botcity.dev\/pt\/frameworks\/desktop\/\">documenta\u00e7\u00e3o<\/a>. E lembre-se, qualquer d\u00favida, s\u00f3 enviar na <a href=\"https:\/\/join.slack.com\/t\/communitybotcitydev\/shared_invite\/zt-1yvjzlce9-esRSoWfAIXPse4L21bzjAQ\">comunidade do slack<\/a> ou em nosso <a href=\"https:\/\/community.botcity.dev\/\">f\u00f3rum<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Compartilhe com a comunidade o seu projeto<\/h2>\n<p>Ap\u00f3s construir a sua automa\u00e7\u00e3o, que tal compartilhar com a comunidade o que aprendeu e o rob\u00f4 que voc\u00ea construiu? Basta compartilhar com o <a href=\"https:\/\/repository.botcity.dev\/\">reposit\u00f3rio de rob\u00f4s da comunidade<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea j\u00e1 deve conhecer ferramentas e frameworks que podem te ajudar a construir automa\u00e7\u00f5es para interagir com sistemas Web. Mas e quando se trata de sistemas desktop, como voc\u00ea faz? Vim te mostrar como utilizar o framework Open Source da BotCity com diversas funcionalidades para voc\u00ea construir a sua automa\u00e7\u00e3o com Python RPA. Preparando o<\/p>\n","protected":false},"author":214060721,"featured_media":6261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[773027],"tags":[773107,773203,773204,773029,773055,773030],"class_list":["post-6207","post","type-post","status-publish","format-standard","has-post-thumbnail","category-automacao-python","tag-automacao","tag-automacao-desktop","tag-desktop-pt-br","tag-python-pt-br","tag-python-rpa","tag-rpa-pt-br"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a<\/title>\n<meta name=\"description\" content=\"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a\" \/>\n<meta property=\"og:description\" content=\"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a\" \/>\n<meta property=\"article:published_time\" content=\"2023-09-20T21:50:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-19T14:04:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lorhan Caproni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lorhan Caproni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/\"},\"author\":{\"name\":\"Lorhan Caproni\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#\\\/schema\\\/person\\\/c70dcd8d50fca4702dc06ce662e0f111\"},\"headline\":\"Construindo um bot com Python RPA para interagir com sistemas desktop\",\"datePublished\":\"2023-09-20T21:50:17+00:00\",\"dateModified\":\"2024-01-19T14:04:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/\"},\"wordCount\":2343,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png\",\"keywords\":[\"automa\u00e7\u00e3o\",\"automa\u00e7\u00e3o desktop\",\"desktop\",\"python\",\"python rpa\",\"rpa\"],\"articleSection\":[\"Automa\u00e7\u00e3o Python\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/\",\"url\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/\",\"name\":\"Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png\",\"datePublished\":\"2023-09-20T21:50:17+00:00\",\"dateModified\":\"2024-01-19T14:04:39+00:00\",\"description\":\"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png\",\"contentUrl\":\"https:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png\",\"width\":1920,\"height\":1080,\"caption\":\"Fundo escuro com uma foto de um teclado de computador. No centro est\u00e1 o logo da BotCity na cor branca. Logo abaixo o texto \\\"Construindo um bot com Python RPA para interagir com sistemas desktop\\\".\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/2023\\\/09\\\/20\\\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Construindo um bot com Python RPA para interagir com sistemas desktop\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/\",\"name\":\"Blog BotCity\",\"description\":\"Explore o blog BotCity com conte\u00fados para automatizar e governar em Python. Mantenha-se informado e melhore o desempenho tecnol\u00f3gico, a seguran\u00e7a e o ROI da sua empresa.\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#organization\",\"name\":\"BotCity\",\"url\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"http:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/logo_botcity_2024_black.png\",\"contentUrl\":\"http:\\\/\\\/blog.botcity.dev\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/logo_botcity_2024_black.png\",\"width\":1611,\"height\":384,\"caption\":\"BotCity\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/#\\\/schema\\\/person\\\/c70dcd8d50fca4702dc06ce662e0f111\",\"name\":\"Lorhan Caproni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g\",\"caption\":\"Lorhan Caproni\"},\"description\":\"BotCity Cofounder and CEO\",\"sameAs\":[\"http:\\\/\\\/botcitydev.wordpress.com\"],\"url\":\"https:\\\/\\\/blog.botcity.dev\\\/pt-br\\\/author\\\/lorhanb8c3fbc9af\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a","description":"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/","og_locale":"pt_BR","og_type":"article","og_title":"Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a","og_description":"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.","og_url":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/","og_site_name":"Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a","article_published_time":"2023-09-20T21:50:17+00:00","article_modified_time":"2024-01-19T14:04:39+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","type":"image\/png"}],"author":"Lorhan Caproni","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Lorhan Caproni","Est. tempo de leitura":"14 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#article","isPartOf":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/"},"author":{"name":"Lorhan Caproni","@id":"https:\/\/blog.botcity.dev\/pt-br\/#\/schema\/person\/c70dcd8d50fca4702dc06ce662e0f111"},"headline":"Construindo um bot com Python RPA para interagir com sistemas desktop","datePublished":"2023-09-20T21:50:17+00:00","dateModified":"2024-01-19T14:04:39+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/"},"wordCount":2343,"commentCount":0,"publisher":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/#organization"},"image":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","keywords":["automa\u00e7\u00e3o","automa\u00e7\u00e3o desktop","desktop","python","python rpa","rpa"],"articleSection":["Automa\u00e7\u00e3o Python"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/","url":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/","name":"Construindo um bot com Python RPA para interagir com sistemas desktop - Blog BotCity - Conte\u00fado para Automa\u00e7\u00e3o e Governan\u00e7a","isPartOf":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#primaryimage"},"image":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","datePublished":"2023-09-20T21:50:17+00:00","dateModified":"2024-01-19T14:04:39+00:00","description":"Vamos aprender como desenvolver suas automa\u00e7\u00f5es desktop com o framework Open Source da BotCity e Python RPA.","breadcrumb":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#primaryimage","url":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","contentUrl":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","width":1920,"height":1080,"caption":"Fundo escuro com uma foto de um teclado de computador. No centro est\u00e1 o logo da BotCity na cor branca. Logo abaixo o texto \"Construindo um bot com Python RPA para interagir com sistemas desktop\"."},{"@type":"BreadcrumbList","@id":"https:\/\/blog.botcity.dev\/pt-br\/2023\/09\/20\/construindo-um-bot-com-python-rpa-para-interagir-com-sistemas-desktop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.botcity.dev\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Construindo um bot com Python RPA para interagir com sistemas desktop"}]},{"@type":"WebSite","@id":"https:\/\/blog.botcity.dev\/pt-br\/#website","url":"https:\/\/blog.botcity.dev\/pt-br\/","name":"Blog BotCity","description":"Explore o blog BotCity com conte\u00fados para automatizar e governar em Python. Mantenha-se informado e melhore o desempenho tecnol\u00f3gico, a seguran\u00e7a e o ROI da sua empresa.","publisher":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.botcity.dev\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/blog.botcity.dev\/pt-br\/#organization","name":"BotCity","url":"https:\/\/blog.botcity.dev\/pt-br\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/blog.botcity.dev\/pt-br\/#\/schema\/logo\/image\/","url":"http:\/\/blog.botcity.dev\/wp-content\/uploads\/2025\/09\/logo_botcity_2024_black.png","contentUrl":"http:\/\/blog.botcity.dev\/wp-content\/uploads\/2025\/09\/logo_botcity_2024_black.png","width":1611,"height":384,"caption":"BotCity"},"image":{"@id":"https:\/\/blog.botcity.dev\/pt-br\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blog.botcity.dev\/pt-br\/#\/schema\/person\/c70dcd8d50fca4702dc06ce662e0f111","name":"Lorhan Caproni","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4f02f5e361046d8a6d852df16da98ddff27755dc746d7151c3b577231cbf3ba?s=96&d=identicon&r=g","caption":"Lorhan Caproni"},"description":"BotCity Cofounder and CEO","sameAs":["http:\/\/botcitydev.wordpress.com"],"url":"https:\/\/blog.botcity.dev\/pt-br\/author\/lorhanb8c3fbc9af\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/blog.botcity.dev\/wp-content\/uploads\/2023\/09\/Construindo-um-bot-com-Python-RPA-para-interagir-com-sistemas-desktop-2-1.png","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pdx8c3-1C7","_links":{"self":[{"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/posts\/6207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/users\/214060721"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/comments?post=6207"}],"version-history":[{"count":38,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/posts\/6207\/revisions"}],"predecessor-version":[{"id":6327,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/posts\/6207\/revisions\/6327"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/media\/6261"}],"wp:attachment":[{"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/media?parent=6207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/categories?post=6207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.botcity.dev\/pt-br\/wp-json\/wp\/v2\/tags?post=6207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}