Selenium Tutorial VBA Excel: exemplo de raspagem da Web do Chrome

O que é raspagem de dados usando selênio?

Selenium pode ser classificado como uma ferramenta de automação que facilita a extração de informações de páginas da web em HTML para realizar a extração de dados utilizando o Google Chrome.

Como preparar a macro do Excel antes de realizar a extração de dados usando Selenium?

Existem certos pré-requisitos que devem ser executados no arquivo de macro do Excel antes de entrar no processo de extração de dados no Excel.

Esses pré-requisitos são os seguintes: –

Passo 1) Abra uma macro baseada em Excel e acesse a opção de desenvolvedor do Excel.

Prepare a macro do Excel antes de realizar a extração de dados

Passo 2) Selecione a opção Visual Basic na faixa do desenvolvedor.

Prepare a macro do Excel antes de realizar a extração de dados

Passo 3) Insira um novo módulo.

Prepare a macro do Excel antes de realizar a extração de dados

Passo 4) Inicialize uma nova sub-rotina e nomeie-a como test2.

Sub test2()
End sub

A seguir estariam os resultados do módulo: –

Prepare a macro do Excel antes de realizar a extração de dados

Passo 5) Acesse a opção de referência na guia de ferramentas e referência Selenium biblioteca de tipos. As seguintes bibliotecas devem ser referenciadas ao módulo, pois ajudam a abrir o Google Chrome e facilitam o desenvolvimento de scripts de macro.

Prepare a macro do Excel antes de realizar a extração de dados

Agora o arquivo Excel está pronto para interagir com o internet explorer. Os próximos passos seriam incorporar um script de macro que facilitaria a extração de dados em HTML.

Como abrir Google Chrome usando VBA?

Aqui estão os passos para abrir Google Chrome usando VBA

Passo 1) Declare e inicialize as variáveis ​​na sub-rotina conforme mostrado abaixo

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer

Passo 2) Para abrir o Google Chrome usando Selenium e VBA, escreva driver.start “chrome” e pressione F5.

O seguinte seria o código.

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer
Driver.start "Chrome"
Application.Wait Now+Timevalue("00:00:20")
End sub

O módulo resultaria da seguinte forma: –

Abra Google Chrome Usando VBA

Como abrir um site no Google Chrome usando VBA?

Depois de conseguir acessar o google chrome usando VBA, o próximo passo seria incorporar o acesso a um site usando VBA. Isso é facilitado pela função get em que o URL deve passar como aspas duplas no atributo.

Siga as seguintes etapas conforme exibido

O módulo ficaria assim: –

Abra o site em Google Chrome Usando VBA

Pressione F5 para executar a macro.

A seguinte página da web seria aberta no Google Chrome conforme exibido

Sub test2()
Dim driver as new webdriver
Dim rowc, cc, columnC as integer
Driver.start "Chrome"
Driver.get "https://demo.guru99.com/test/web-table-element.php"
Application.Wait Now+Timevalue("00:00:20")
End sub

Abra o site em Google Chrome Usando VBA

Agora a macro do Excel está pronta para executar as tarefas de raspagem. A próxima etapa mostraria como as informações podem ser extraídas aplicando selênio e VBA.

Como extrair informações do site usando VBA?

Suponha que o day trader queira acessar os dados do site diariamente. Cada vez que o day trader pressiona o botão, ele deve extrair automaticamente os dados do mercado para o Excel.

No site acima, seria necessário inspecionar um elemento e observar como os dados estão estruturados. Acesse o código-fonte HTML abaixo pressionando control + Shift + I

<table class="datatable">
<thead>
<tr>
<th>Company</th>
<th>Group</th>
<th>Pre Close (Rs)</th>
<th>Current Price (Rs)</th>
<th>% Change</th>
</tr>

O código fonte seria o seguinte: –

Como pode ser visto que os dados estão estruturados como uma única tabela HTML. Portanto, para extrair dados inteiros da tabela HTML, seria necessário projetar uma macro que extraísse as informações do cabeçalho da tabela HTML e os dados correspondentes associados à tabela. Execute as seguintes tarefas conforme exibido: –

Passo 1) Formule um loop for que percorra as informações do cabeçalho HTML como uma coleção. O driver Selenium precisa encontrar as informações do cabeçalho da tabela HTML. Para fazer isso, utilizamos os métodos FindElementByClass() e FindElementByTag() para executar a tarefa conforme exibido

O módulo VBA ficaria assim: –

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get "https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th

Passo 2) Em seguida, o driver Selenium localizaria os dados da tabela usando uma abordagem semelhante, conforme mencionado acima. Você deve escrever o seguinte código: –

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get"https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th
For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr")
columnC = 1
For Each td In tr.FindElementsByTag("td")
Sheet2.Cells(rowc, columnC).Value = td.Text
columnC = columnC + 1
Next td
rowc = rowc + 1
Next tr
Application.Wait Now + TimeValue("00:00:20")
End Sub

O módulo vba ficaria assim: –

O Excel pode ser inicializado por meio do atributo Range da planilha Excel ou através do atributo células da planilha Excel. Para reduzir a complexidade do script VBA, os dados da coleta são inicializados no atributo de células Excel da planilha 2 presente na pasta de trabalho. Além disso, o atributo text ajuda a obter as informações do texto colocadas na tag HTML.

Sub test2()
Dim driver As New WebDriver
Dim rowc, cc, columnC As Integer
rowc = 2
Application.ScreenUpdating = False
driver.Start "chrome"
driver.Get"https://demo.guru99.com/test/web-table-element.php"
For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr")
cc = 1
For Each t In th.FindElementsByTag("th")
Sheet2.Cells(1, cc).Value = t.Text
cc = cc + 1
Next t
Next th
For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr")
columnC = 1
For Each td In tr.FindElementsByTag("td")
Sheet2.Cells(rowc, columnC).Value = td.Text
columnC = columnC + 1
Next td
rowc = rowc + 1
Next tr
Application.Wait Now + TimeValue("00:00:20")
End Sub

O módulo vba ficaria assim: –

Extraia informações do site usando VBA

Passo 3) Assim que o script da macro estiver pronto, passe e atribua a sub-rotina ao botão Excel e saia do módulo do VBA. Rotule o botão como atualização ou qualquer nome adequado que possa ser inicializado para ele. Neste exemplo, o botão é inicializado como atualização.

Extraia informações do site usando VBA

Passo 4) Pressione o botão Atualizar para obter a saída mencionada abaixo

Extraia informações do site usando VBA

Passo 5) Compare os resultados no Excel com os resultados do Google Chrome

Extraia informações do site usando VBA

Resumo

  • Selenium pode ser classificado como uma ferramenta de automação que facilita a extração de informações de páginas da web em HTML para realizar a extração de dados utilizando o Google Chrome.
  • A raspagem na internet deve ser realizada com cuidado.
  • Normalmente é contra os termos do site extrair informações.
  • Quando a raspagem é feita por meio do Selenium, ele oferece suporte a vários navegadores.
  • Em outras palavras, o raspador pode executar tarefas semelhantes de raspagem Firefox, Internet Explorer também.