Usando Selenium em um projeto de RPA em Python
Para começar, o que é RPA?
Robotic Process Automation (Automação de Processos Robotizado) é um método aplicado de automação que utiliza de programação para criar uma lógica (robô) pare realizar algum serviço usual mas não obrigatoriamente repetitivo. Ou seja, um programa que realiza um serviço que seria usualmente realizado por um ser humano.
O RPA auxilia por realizar tarefas de baixa importância ou alta repetibilidade, diminuindo o risco de erros humanos por estresse ou falta de atenção (O que é comum em muito em casos de alto índice de repetições).
Como o intuito é utilizar de uma ferramenta para realizar o “mesmo procedimento” diversas vezes, o processo tende a ser imune a falhas de repetição, porém falhas pontuais continuarão sendo um problema se o robô não for realizado pensando nestes.
E Selenium?
Calma, Selenium pode se referir ao elemento Selênio da tabela periódica mas não vamos ver química aqui (Ufa!)
Ao se tratar de programação, Selenium se se refere a um automatizador de browser que utiliza de um driver para realizar a comunicação com o navegador e então fazer o controle e acessos de uma forma que simule a atividade humana.
Ok, entendi, como começar?
Primeiro, vamos entender como o Selenium WebDriver funciona.
O Selenium WebDriver traz um conjunto de pacotes de funções para o projeto em Python, mas para ter se conectar ao browser é necessário uma interface de controle, e esta é o driver do navegador.
Cada navegador possui seu próprio driver e pode ser baixado diretamente e sem dificuldades aqui.
Alguns deles são:
- Chrome: ChromeDriver
- Firefox: Geckodriver
- Edge: EdgeDriver
A biblioteca do Selenium WebDriver então fará requisições de envio e recebimento de informação para o driver, que fará o mesmo com o browser controlado, finalizando assim a comunicação entre o programa de RPA e o navegador web.
O que eu preciso para tudo isso então?
Quatro coisas são necessárias para iniciar:
- Um programa compilador de python
Visual Code, PyCharm, Jupyter, etc. - Biblioteca Selenium instalada
No seu prompt de comando python, utilize o comandopip install selenium
- O navegador escolhido instalado
Firefox, Chrome, Edge, etc. - O driver do navegador escolhido
(Veja o link com os drivers que foi disposta anteriormente)
Certo, agora que temos tudo preparado, vamos começar!
Como todo programa de Python, o primeiro passo é importar as bibliotecas que serão utilizadas no código, no caso como estaremos lidando com a navegação de browser pelo selenium, será esta lib que utilizaremos. Como o pacote selenium contém multiplas funções e grande parte delas não serão utilizadas, iremos direto com algumas mais específicas:
from selenium import webdrive -> biblioteca interna do selenium para iniciar o controle do browser
from selenium.webdriver.firefox.options import Options -> Opções adicionais para inicialização do browser
No geral, o comando para inicialização do driver escolhido é suficiente para abrir um browser controlado pelo driver e segue o seguinte comando:
webdriver:
subpasta de comandos importada acimaFirefox:
browser escolhido para iniciar o controle pelo driverexecutable_path:
caminho para o arquivo de driver que foi baixado (no caso do Firefox é o geckodriver.exe mencionado anteriormente)
Nota: muitas vezes é necessário informar o caminho para o browser. Para isso utiliza-se a biblioteca de subcomandos “Options” baixada.
A simbologia do comando permanece a mesma porém com a adição de:options:
caminho para o arquivo executável do browser escolhido
De olho no resultado!!
Com a execução correta do comando webdriver, o browser escolhido será aberto apontado o controle de forma remota que está sendo realizado.
O elemento “driver” representa o browser aberto. Isso indica que as ações tomadas com este elemento serão refletidas no browser controlado.
Funções de Navegação Padrão
Uma série de funções são disponibilizadas para navegação do browser a partir do momento que a conexão é estabelecida. Algumas delas são:
- driver.
- get()
- back()
- forward()
- refresh()
- close()
- quit()
- driver.get(‘http://www.quotes.toscrape.com’) -> navega para o site escolhido
- driver.back() -> retorna página web
- driver.forward() -> avança página web
- driver.refresh() -> atualiza página
- driver.close() -> fecha página atual (em caso de mais de uma página aba. Caso seja apenas uma o browser será fechado)
- driver.quit() -> fecha o browser por completo
Funções de Localização
Assim como a navegação livre, algumas funções para localização de elemento também são possíveis de serem executadas uma vez que nosso browser está definido, são algumas delas:
- driver.
- find_element_by
> name
>tag_name
>id
>class_name
>xpath
>css_selector
>link_text
>partial_link_text
- find_elements_by
…
- driver.find_element_…-> procura o primeiro elemento da página com a especificação que foi indicada
- driver.find_elements_… -> Retorna o resultado tipo lista com todos elementos com a especificação indicada
Podemos ver uma série de exemplos a seguir
Em cada caso acima foi utilizada uma forma diferente para localização dos elementos. Pode-se perceber que nos 2 exemplos do meio a resposta de output está entre colchetes “[]” que indica ser uma lista pelo fato do comando ter sido usado com ‘elements’ (Apesar de no caso ser uma lista de um único elemento)
Funções de Ação
Depois de navegar para a página desejada e localizar o elemento necessário, algumas ações podem ser tomadas seguindo alguns comandos. Seguem abaixo alguns exemplos:
- element.
- send_keys()
- click()
- get_screenshot_as_png()
- save_screenshot()
- screenshot()
- get_attribute(
> ‘id’
> ‘value’
> ‘name’
> ‘innerText’
> ‘href’
)
- send_keys(‘texto’) -> envia os caracteres desejados ao elemento selecionado
- click() -> executa um click sobre o elemento
- get_screenshot_as_png(‘imagem.png’) -> salva um arquivo png do elemento selecionado com o nome especificado
- get_attribute(‘id’) -> busca a informação desejada do elemento selecionado
Para melhor entendimento seguem alguns exemplos:
- No primeiro caso, temos a atribuição de um botão a uma variável (navegação) e logo em seguida um clique é executado
- Em seguida, um envio do caracter ‘T’ maiúsculo para o elemento de id ‘newsletter-email’
- Por fim, um clique é executado no elemento que tem css_selector ‘.full > a:nth-child(7)’
Funções de Navegação Avançadas
Por fim, algumas outras funções mais específicas podem ser utilizadas para contribuir na navegação e controle da página:
- window_handles
- current_window_handle
- current_url
- execute_script
- switch_to.
- window()
- frame()
- alert()
- driver.window_handles -> retorna uma lista com as janelas que estão abertas no browser controlado
- driver.current_window_handle-> retorna qual das abas abertas está sendo controlada no momento
- driver.current_url -> URL da página que está sendo controlada no momento
- driver.execute_script(‘script’) -> envia e executa um comando javascript para a página controlada
- driver.switch_to.window(‘window’) -> troca o controle para a página escolhida. Este comando pode ser utilizado em conjunto com o
window_handles
para fazer a a mudança de abas de forma rápida.
Nos exemplos acima temos:
- Busca do URL atual da página
- Mudança do controle da página para a primeira aba
- Um script para realizar rolagem da o fim da página
- Um script para abrir uma mensagem de alerta no browser
Considerações finais
Selenium é uma ferramenta muito útil para execução de RPA. Suas inúmeras funcionalidades permitem manipular as páginas web com grande versatilidade.
Muitos subcomandos não foram explorados neste documento e é importante resaltar que diversas outras funções são possíveis, como:
- arrastar e soltar
- verificação de carregamento de elementos
- verificação de bloqueio de elementos
- tornar o browser invisível durante execução do programa
- baixar arquivos da página automaticamente
entre outras diversas funcionalidades.
Para isso basta acessar o site oficial do WebDriver Selenium e explorar os recursos adicionais!
Acesse meu GitHub para ver projetos reais aplicados ou acesse meu LinkedIn para mais informações.