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
Pronto, a partir daqui sua biblioteca Selenium estará ativada para uso em seu VBA.
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:
Após clicar no botão:
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?
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.