Blog

Postado em em 5 de março de 2022

Buscar Cotações de Energia Diariamente na WEB com Selenium no VBA

Hoje eu quero te mostrar como buscar cotações de energia diariamente com VBA usando o selenium para trazer esses dados!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, Impressionadores! Na aula de hoje vamos mostrar como buscar cotações de energia da web com VBA de forma automática!

A ideia é te mostrar como buscar cotações diariamente com VBA para automatizar os seus processos e deixar tudo mais fácil.

Para fazer essa busca nós vamos fazer o webscraping com Selenium no VBA, que nada mais é do que uma busca na web.

Para isso vamos utilizar o Selenium no VBA que permite essa busca através do navegador (links estão na descrição da videoaula para download).

Isso quer dizer que nessa aula você vai aprender a buscar dados da web com Selenium seja para cotações de energia ou para outras informações que você precise!

Links para download

Em um primeiro momento precisaremos baixar para o computador a biblioteca de comandos, objetos e métodos do Selenium.

Elas devem ser instaladas no seu computador com o instalador do programa, normalmente.

Esses serão usados e acessados para que o VBA faça essa integração com os outros navegadores que não sejam o Internet Explorer (integração nativa).

Logo após você terá, com o VBA aberto, que:

  • Ir na guia Ferramentas
  • Referências…
  • Marcar a caixinha correspondente ao “Selenium Type Library” (como na foto abaixo)
  • OK
1 2

Pronto, a partir daqui sua biblioteca Selenium estará ativada para uso em seu VBA.

2 2

Além da biblioteca de comandos do Selenium, nós precisaremos fazer o download dos drivers dos navegadores extras (não nativos – Opera, Mozzilla, Google Chrome).

Esses drivers serão acessados e utilizados justamente pela biblioteca instalada o Selenium, para que o VBA possa fazer a comunicação/integração dos códigos e fazer ações nos navegadores.

Teremos que instalar esses drivers no local específico do computador onde estará instalado o Selenium. Abaixo mostramos um exemplo de onde ele pode/deve estar instalado:

  • C:UsersDiego AmorimAppDataLocalSeleniumBasic

OBS: cada computador tem um caminho específico.

Código de aula e comentários

Option Explicit

Sub buscarCotacaoDiaria()

Dim navegadorChrome As New ChromeDriver
Dim linkPesquisa As String
Dim mediaDiaria As Object
Dim ultLin As Long

ultLin = Range("A1000000").End(xlUp).Row

If Cells(ultLin, 1).Value = Date Then Exit Sub

Cells(ultLin + 1, 1).Value = Date

linkPesquisa = "https://www.ccee.org.br/web/guest"

navegadorChrome.AddArgument ("--headless")

navegadorChrome.Get (linkPesquisa)

Set mediaDiaria = navegadorChrome.FindElementByTag("table").FindElementsByTag("tr")(3).FindElementsByTag("td")

Cells(ultLin + 1, 2).Value = CDbl(mediaDiaria(2).Attribute("innerText"))
Cells(ultLin + 1, 3).Value = CDbl(mediaDiaria(3).Attribute("innerText"))
Cells(ultLin + 1, 4).Value = CDbl(mediaDiaria(4).Attribute("innerText"))
Cells(ultLin + 1, 5).Value = CDbl(mediaDiaria(5).Attribute("innerText"))

navegadorChrome.Quit

Set navegadorChrome = Nothing
Set mediaDiaria = Nothing

End Sub

Comentários sobre a macro buscarCotacaoDiaria():

  • A primeira linha diz que que todas as variáveis utilizadas no código serão obrigatoriamente declaradas. Observe que isso é algo que é colocado fora da estrutura das nossas subs.
  • Vamos dimensionar:
    • A variável “navegadorChrome” como um objeto que representa uma nova instância do Google Chrome (através do Chrome Driver)
    • a variável “linkPesquisa” como como uma String (texto)
    • a variável “mediaDiaria” como um Object (objeto)
    • a variável “ultLin” como um Long (número inteiro de módulo grande)
    • Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
  • Armazenar na variável “ultLin” a última linha preenchida da coluna A da nossa planilha
  • Utilizar uma estrutura If de comparação para verificar se o valor representado pela célula localizada na linha dada por “ultLin” e na coluna A é igual a data atual (dada pela função Date). Caso seja, a macro será abortada pela instrução de saída “Exit Sub”
  • Caso seja diferente da data atual dada pelo sistema, a macro seguirá
  • Armazenar o valor da data atual do sistema na célula imediatamente abaixo da linha dada por “ultLin” (ultLin+1), na 1ª coluna (A).
  • A variável “linkPesquisa” vai receber de fato o endereço do site a ser visitado, em formato de String (texto)
  • Para o “navegadorChrome” criado vamos adicionar o argumento “sem cabeça”. Ou seja, ao ser aberto, o navegador não vai ser mostrado, por opção nossa
  • Vamos visitar o site dado pela variável “linkPesquisa”, que é para onde vamos navegar de fato
  • Vamos atribuir à variável “mediaDiaria” o conjunto de elementos armazenados na tag “td” da 3ª linha da tabela (representada por tr de índice 3) de tag “table”
  • Armazenar o valor da data atual do sistema na célula imediatamente abaixo da linha dada por “ultLin” (ultLin+1), na 2ª coluna (B) o texto (que será a média diária da região Sul) que for localizado no atributo “innerText” do 2º elemento, que será convertido para número pela função CDbl
  • Armazenar o valor da data atual do sistema na célula imediatamente abaixo da linha dada por “ultLin” (ultLin+1), na 3ª coluna (C) o texto (que será a média diária da região Sudeste) que for localizado no atributo “innerText” do 3º elemento, que será convertido para número pela função CDbl
  • Armazenar o valor da data atual do sistema na célula imediatamente abaixo da linha dada por “ultLin” (ultLin+1), na 4ª coluna (D) o texto (que será a média diária da região Norte) que for localizado no atributo “innerText” do 4º elemento, que será convertido para número pela função CDbl
  • Armazenar o valor da data atual do sistema na célula imediatamente abaixo da linha dada por “ultLin” (ultLin+1), na 5ª coluna (E) o texto (que será a média diária da região Nordeste) que for localizado no atributo “innerText” do 5º elemento, que será convertido para número pela função CDbl
  • Fecharemos (quit, em inglês) o nosso navegadorChrome
  • Por convenção iremos “limpar” a memória das variáveis “navegadorChrome” e “mediaDiaria”
  • Se encerra o nosso código

Ao final do código, teremos os valores pesquisados na células das colunas B até E adquirido a partir da visita ao site. Veja abaixo:

3 1

Após clicar no botão:

Buscar cotações diariamente com VBA
Buscar cotações diariamente com VBA

Conclusão de Como Buscar Cotações de Energia

Nessa aula você lidou com:

  • Buscar dados da web com Selenium
  • Webscraping com Selenium no VBA
  • Buscar cotações de energia da web com VBA

Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel, VBA, Power BI e PowerPoint toda semana! Um abraço!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um Minicurso Gratuito?


Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador