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.
Passo 2) Selecione a opção Visual Basic na faixa do desenvolvedor.
Passo 3) Insira um novo módulo.
Passo 4) Inicialize uma nova sub-rotina e nomeie-a como test2.
Sub test2() End sub
A seguir estariam os resultados do módulo: –
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.
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: –
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: –
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
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: –
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.
Passo 4) Pressione o botão Atualizar para obter a saída mencionada abaixo
Passo 5) Compare os resultados no Excel com os resultados do Google Chrome
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.